周二知识点比较零碎,主要包括第三方库的安装,PYC文件,数据类型,列表,字符串,数据运算,字典和set的使用。


pip命令安装第三方库:


Python 导入库的时候,可以用import命令,如果是标准库,那么直接运行即可,如果是第三方的库,需要用pip命令安装之后才能导入。

例如

pip install pandas


os.system命令和 os.popen命令:


上一周学习了基本的os.system()命令,这个命令在windows下面同样工作。例如输出IP配置信息

>>>import os
>>>os.system("ipconfig")

如果希望保存到变量,可以

>>>import os
>>>r=os.popen("ipconfig").read()
>>>print(r)


Pyc文件:

当在一个Python文件中导入另外一个Python模块的时候,执行会自动生成一个PYC文件。这个文件是一个字节码文件。Python的工作原理是首先把源文件编译成pyc字节码文件,然后这个字节码文件再通过python的虚拟机执行。当手动运行python程序的时候,他不会在硬盘上保存对应的pyc文件,这是因为手动执行的频率一般而言不会太高,当下一次操作的时候,对应的内容可能有更改,因此没有保留的意义。而自动导入执行的时候,会自动创建对应的pyc文件。


数据类型:

int:整型, Python3以后不区分长整型和普通整型了

bool: 布尔型, True或者1为真;False或者0为假

字符串:注意下面例子的区别,他们的结果显示一样,不过+是创建了3个内存分区;而后者只用了1个,效率更高。

>>>name="yuan li"
>>>print("My name is "+ name+" and You?")
>>>print("My name is %s and You?" %name)
My name is yuan li and You?


列表:其他语言里面叫做数组,是使用最最广泛的数据结构


例子:


获取第一个元素

>>>name=["zhangsan","lisi","wangwu"]
>>>name[0]
'zhangsan'


获取最后一个元素

>>>name[-1]
'wangwu'



获取前第一个元素

>>>name[0:1]
['zhangsan']



获取倒数第2个元素

>>>name[-2:-1]
['lisi']



设置步长为2,隔一个取一个元素

>>>name[::2]
['zhangsan', 'wangwu']



切片,获取子列表的第三个元素

>>>name=["h","sjdkf",23,232,["22","33",234]]
>>>name[4][2]
234



指定索引位置,插入新元素

>>>name.insert(3,"hhhh")
>>>name
['h', 'sjdkf', 23, 'hhhh', 232, ['22', '33', 234]]



判断是否存在元素

>>>name
['jkjjljlj', 'sjdkf', ['22', '33', 234], 'end']
>>> 22 in name
False
>>> '22' in name
False
>>> 'end' in name
True
>>> '22' in name[2]
True



指定元素的值来删除 注意一次只能删除一个

>>> name.remove(23)
>>> name
['h', 'sjdkf', 'hhhh', 232, ['22', '33', 234], 'end']


一次性删除多个连续的元素,可以使用del

>>> del name[2:4]
>>> name
['h', 'sjdkf', ['22', '33', 234], 'end']


修改某个位置的元素值

>>> name[0]='jkjjljlj'
>>> name
['jkjjljlj', 'sjdkf', ['22', '33', 234], 'end']


判断某元素个数

>>>name.count('22')
0


把所有的9都改成999

>>> name=[2,2,3,9,23,9,22,21,9]
for i in range(name.count(9)):
    index=name.index(9)
    name[index]=999
print(name)

[2, 2, 3, 999, 23, 999, 22, 21, 999]


合并name2 到name里面

name.extend(name2)
print(name)

['AA', 'jksf', [2, 99, 5], '234', 'klk', 'sdf']


排序 注意混杂字符串和数字的列表在3里面不能排序,但是在2里面会按照ansc编码的值排序

>>> print(name.sort())

Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unorderable types: list() < str()


根据索引号删除,如果不指定索引号,默认删除最后一位

>>> name.pop(2)
print(name)

['AA', 'jksf', [2, 99, 5], '234']


列表的复制,注意copy只能复制第一层的数据,里面嵌套的列表,仅仅复制了内存地址,换而言之,就是类似一个软连接,在源列表和复制后的列表里,如果修改嵌套的列表内的元素,两个表显示出来的效果都会同时变化。

>>> name=['al','jksf','sdf',[2,3,5],'234']
name3=name.copy()
name[0]='AA'
name[3][1]=99
print(name)
print(name3)

['AA', 'jksf', 'sdf', [2, 99, 5], '234']
['al', 'jksf', 'sdf', [2, 99, 5], '234']



如果想进行深度的复制,需要使用copy模块的deepcopy命令, 可以看见deepcopy之后他们是两个独立的个体,互相不受影响

>>> import copy
name=['al','jksf','sdf',[2,3,5],'234']
name4=copy.deepcopy(name)
name[3]='22222'
print(name)
print(name4)

['al', 'jksf', 'sdf', '22222', '234']
['al', 'jksf', 'sdf', [2, 3, 5], '234']


元组:tuple,只有只读属性的列表

用圆括号定义

>>> r=(1,3,4,5)
print(type(r))

因为只有只读属性,他的函数只有count和index两个

>>> print("count of 1:",r.count(1))
print("index of 3:",r.index(3))
count of 1: 1
index of 3: 1


字符串的操作


例如:去掉前后的空格

>>> user = " Yuan Li is a handsome man "
print(user.strip()) # remove space in the front and end
Yuan Li is a handsome man


用split分割字符串成为一个列表;用join合并列表成为一个字符串

>>> names="zhangsan, lisi, wanger"
name2=names.split(",")  #become list
print(name2)
print("|".join(name2))
['zhangsan', ' lisi', ' wanger']
zhangsan| lisi| wanger


指定索引输出

>>> print(names[0])
z


判断是否包括某个字符

>>> print(' ' in names)
True


大写首字母

>>> print(names.capitalize())
Zhangsan, lisi, wanger


两种方式传入参数

>>> msg="hello,{name}, it's been a long {time}"
msg2=msg.format(name='Yuan',time= 'period')
msg3="hhh{0},dddd{1}"
print(msg2)
print(msg3.format('Yuuu','222'))
hello,Yuan, it's been a long period


切片

>>> name="abcedefgh"
print(names[2:5])
ang


输出居中的格式center()

>>> print(name.center(40,'-'))
---------------abcedefgh----------------


find查找字符串中包含的字符,如果存在,返回索引,不存在返回-1


>>> name="abcedefgh"
print(name.find('e'))
print(name.find('dddd'))
3
-1


isdigit()判断输入的是否是数字

>>> age=input("your age:")
if age.isdigit():
    age=int(age)
else:
    print("invalid data type")
your age:>? er        
invalid data type


endwith()判断以什么结尾

>>> name="abcedefgh"
print(name.endswith("fgh"))
True


转换大小写

>>> print(name.upper())
ABCEDEFGH


数据运算


1、算数运算:a=10,b=20

Python 学习笔记 - 列表,字符串,数据操作和字典_Python



2、比较运算:

Python 学习笔记 - 列表,字符串,数据操作和字典_Python_02

3、赋值运算:

Python 学习笔记 - 列表,字符串,数据操作和字典_Python_03

4、逻辑运算:

Python 学习笔记 - 列表,字符串,数据操作和字典_Python_04

5、成员运算:

Python 学习笔记 - 列表,字符串,数据操作和字典_Python_05



6、 二进制运算:


运算符描述解释
与运算这个二进制位必须在2组数中都为真,结果才返回真
I   或运算这个二进制位只需在其中一组数据中为真即返回真
异或运算只要这个二进制位在两组数据中不相同就返回
<< 左移运算移动一位相当于乘以2
>> 右移运算移动一位相当于除以2



字典:无序,Key和value配对,key值唯一

例子:定义一个嵌套的字典

id_db={
    23432424234234324:{
        'name':"alex",
        'age':23,
        'addr':'Shandong'
    },
    234324324234324242:{
        'name':'Yuan',
        'age':24,
        'addr':'Sichuan'
    },
    234242423222222222:{
        'name':'john',
        'age':20,
        'addr':'HeNan'
    }
}


指定Key,输出对应的Value

print(id_db[234242423222222222])
{'name': 'john', 'age': 20, 'addr': 'HeNan'}


更改一个Key的值

id_db[234242423222222222]['name']='hhh'
print(id_db[234242423222222222])
{'name': 'hhh', 'age': 20, 'addr': 'HeNan'}


添加一个新的key/value 元素

id_db[234242423222222222]['qq']=2900032
print(id_db[234242423222222222])
{'name': 'john', 'age': 20, 'qq': 2900032, 'addr': 'HeNan'}


删除一个元素

del id_db[234242423222222222]['qq']
print(id_db[234242423222222222])


另外一种删除的方式

id_db[234242423222222222].pop('age')
print(id_db[234242423222222222])


get,如果该Key存在,返回对应的值

v=id_db.get(234242423222222222)
print(v)
{'name': 'john', 'age': 20, 'addr': 'HeNan'}

如果不存在,返回None

v=id_db.get(22222)
print(v)
None


注意,如果使用直接赋值的方式,如果不存在,它会直接抛出一个错误。


v=id_db[22222]
print(v)
Traceback (most recent call last):
  File "<input>", line 35, in <module>
KeyError: 22222



把一个新的字典加入当前的字典


dic2={'name':'kkkk',
      'age':32,
      'addr':'Hongkong'}
id_db.update(dic2)
print(id_db)
{234324324234324242: {'name': 'Yuan', 'age': 24, 'addr': 'Sichuan'}, 23432424234234324: {'name': 'alex', 'age': 23, 'addr': 'Shandong'}, 'addr': 'Hongkong', 'name': 'kkkk', 'age': 32, 234242423222222222: {'name': 'john', 'age': 20, 'addr': 'HeNan'}}


直接输出,不建议使用,效率低

print(id_db.items())


分别输出Key和Value

print(id_db.values())
print(id_db.keys())


判断是否存某个Key

print(234242423222222222 in id_db)


判断这个key是否存在,如果存在,返回value;如果不存在,创建这个key和对应的value,如果不设置value,那么默认为None

print(id_db.setdefault(234242423222222222))#if exists, erturn the value
print(id_db.setdefault(234242423222222122222222,'hhhh'))#otherwise add a new key/value


创建一个新的字典,把列表里面的每一个值拿出来作为key,然后后面的分配同样的值

print(id_db.fromkeys([1,2,3,3],'ddd'))
{1: 'ddd', 2: 'ddd', 3: 'ddd'}


随机的删除一项

print(id_db.popitem())


输出字典的Key和Value,有两种方式,第一种方式适合比较小的字典,效率低;第二种效率比较高

for k,v in id_db.items():
    print(k,v)
for key in id_db:
    print(key,id_db[key])