Python核心数据结构 - littleboy12580/learning_python GitHub Wiki
python的核心数据结构
python是动态类型的,因此不存在变量类型声明
常见数据
数字
1.“/”运算符得到的一定是浮点数,就算两个整数相除其得到的也是浮点数 5/1=5.0 想要得到整数要用“//”,得到的是商(负数则是向下取整);“%”得到的是余数
2.乘方用“**”表示而不是用“^”
字符串
1.字符串内部有‘或者’‘时,可以用转义字符\,另外r' '表示' '内部的字符串默认不转义。
2.python中可以用'''...'''的形式来表示多行内容,r对这个无影响。
3.ord():将字符转换为ascii码的数字;chr():将数字转为字符。
4.在python中字符串是不可变的,但我们可以通过建立一个新的字符串并命名为和原字符串相同的名字来对其进行赋值(此时最初的字符串会被抹去)
5.字符串的格式化调用方法:
'{a},{0} and {b}'.format(42,a='lala',b=[1,2])
空值
1.为None,并不意味着未定义,它是某些内容而不是没有内容,是一个真正的对象并且有一块内存。
2.在列表中,可以通过None提前分配一个N项的列表,这样以后通过索引赋值就不会出现索引不存在的情况了,例如:
L=[None]*100
在这种情况下列表L就会有一个初始大小,可以向0~99的索引赋值了
序列(list)
1.list[0]表示左边第一个元素,list[-1]表示右边第一个元素。
2.使用pop()方法删除末尾元素,使用pop(index)删除指定位置元素,使用remove(value)移除指定值元素 使用append(value)在表尾添加一个元素,使用insert(index)在指定位置添加元素,使用index(i)返回i值的索引,若没有会报一个值错误。
3.list没有固定大小,list里的元素类型也可以各不相同。
4.list[X:Y:J]表示从X开始到Y之前结束(不包括Y),每J个取一次;当J为负数时表示倒序,那时上下边界也需要进行反转。
元组(tuple)
1.tuple一旦初始化就不能被修改。
2.只有一个元素的tuple需要定义成t=(1,)而不能定义成(1),否则结果是1。
字典
1.通过键值对的映射来进行存储。
2.d.get('sss',-1),查找字典里的某个key值‘sss’,如果找不到返回-1,如果找到返回该key值对应的值。
3.字典与格式化输出可以进行结合,如:
"%(age)d %(food)s" % values
其中values为字典,age与food为字典里的键;也可以通过vars()函数替代values。
4.字典解析:一般用来初始化创建一个新字典,例如:
D={x:x**2 for x in [1,2,3,4]};
D={k:v for(k,v) in zip(['a','b','c'],[1,2,3])}
5.在python3.0以上,D.keys()现在返回的是一个视图而不是列表,若想变成列表需要用list(D.keys())进行转换;values()函数也是一样。
6.字典键排序有两种方式:
第一种是:
Ks=D.keys();
ks=list(Ks)
ks.sort() #不返回列表
第二种是:
Ks=D.keys();
sorted(Ks) #返回排序好了的列表
也可以直接sorted(D),返回的同样是排序好了的键值列表
7.在python3.0中字典的大小比较被删除了,若要比较字典的大小需要用sorted(),即
sorted(D1.items())<sorted(D2.items())
文件
1.文件的创建:
f=open('data.txt','w')
第一个参数为文件名与格式,第二个参数为用户对文件的操作权限。
文件的按行读取一般不使用f.readline()方法,而是用文件迭代器,例如:
for line in open('data'):
print(line,end='')
2.从文件读取的数据回到脚本时是一个字符串,因此如果字符串不是我们需要的数据类型,我们需要自己去转换类型;往文件里写数据的时候,文件也不会自动的将数据转换为字符串格式,同样需要我们自己将数据进行字符串格式化。
3.文件上下文管理器:通过try/finally语句或者with/as语句来确保文件在退出后可以自动关闭。(一般情况下python的垃圾收集功能会在对象没有引用的时候自动回收,即会自动关闭文件,但不确定时间,通过上面两种语句可以控制文件的关闭。)
可变性与不可变性
在python中的每一个对象都可以分为不可变形或可变性,在常见数据中不可变的有:数字,字符串与元祖;可变的为:列表和字典。