3.1 数据结构和序列
元组
元组是⼀个固定⻓度,不可改变的Python序列对象。创建元组的最简单⽅式,是⽤逗号分隔⼀列值:如下运行结果(1, 2, 3) (1, 2, (3, 4), 5)
tup = 1,2,3
tup
tup1 = 1,2,(3,4),5
tup1
当⽤复杂的表达式定义元组,最好将值放到圆括号内,如上第二个所示.
⽤tuple可以将任意序列或迭代器转换成元组,运行结果:(4,0,2)
tuple([4,0,2])
元组中存储的对象可能是可变对象。⼀旦创建了元组,元组中的对象就不能修改了:以下报错
tup = tuple(['foo', [1, 2], True])
tup[2]= False
如果元组中的某个对象是可变的,⽐如列表,可以在原位进⾏修改,运行结果:[1, 2, [3, 4, 5]]
tup=[1,2,[3,4]]
tup[2].append(5)
tup
可以⽤加号运算符将元组串联起来,运行结果:(4, 0, 2, 2, 3)
tuple([4,0,2])+(2,3)
元组乘以⼀个整数,像列表⼀样,会将⼏个元组的复制串联起来,运行结果:(1, 2, 3, 1, 2, 3)
tup = 1,2,3
tup*2
元组拆分:直接以赋值的方式进行
tuple⽅法:因为元组的⼤小和内容不能修改,它的实例⽅法都很轻量。其中 ⼀个很有⽤的就是count(也适⽤于列表),它可以统计某个值出现的频率。
列表
与元组对⽐,列表的⻓度可变、内容可以被修改。你可以⽤⽅括号定义,或⽤list函数。
list函数常⽤来在数据处理中实体化迭代器或⽣成器:)(iter())
添加和删除元素,
list.append(obj):可以使用append()在列表末加元素;
list.insert(index, obj):insert可以在特定的位置插⼊元素;
list.pop([index=-1]),pop()移除指定位置的元素;
list.remove(obj):可以使用remove()移掉某个值。
in或not in判断某值是否在列表list里。
串联和组合列表
和元组一样可以使用加号“+”,将两个列表串联起来,但是耗时比较久,性能不佳,一般使⽤extend追加元素。x.extend(obj)
排序
sort做排序:对列表做排序,list_a.sort(key=len),使用列表元素的长度来排序
sorted函数?
二分搜索和维护已排序的列表
bisect模块是
一个python的针对一个有序数组的插入和排序操作的一个模块。但不检查是否数组是否排好序,position=bisect.bisect(x,r),返回x列表中r排序的位置(默认在右)。
切片
⽤切边可以选取⼤多数序列类型的⼀部分,语法是obj[start_index:end_index:step],start_index、end_index是obj的下标,step是步调,默认是1,取值不包括end_index的值,一下输出[12, 14, 23].
list_l = [1, 23, 45, 12, 24, 14, 52, 3]
list_l.sort()
list_l[2:5:1]
一定要注意start_index,end_index,step的正负和大小,这块容易出错,从左往右取值,step必须为正,从右往左取值,step取值为负;
还要注意在连续切片时返回类型为list类型,而取单个元素时是其本身类型。 注意注意
序列函数
python中有一部分有序列的函数:
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中,返回该列表及对应下标:
li = [1, 3, 12, 14, 23, 23, 42, 45]
for i, value in enumerate(li):
print(i, value)
sorted函数:sorted函数可以从任意序列的元素返回⼀个新的排好序的列表,sorted(iterable, cmp=None, key=None, reverse=False)。
zip函数:压缩和解压,压缩:zip可以将多个列表、元组或其它序列成对组合成⼀个元组列表,zip([iterable, ...]),还有解压,反向操作,将行
reversed函数:reversed 函数返回一个反转的迭代器。reversed(iterable)
字典
最重要的数据结构,字典别名是哈希映射或关联数组。它是键值对的大小可变集合,键和值都是 Python对象。
del关键字或pop⽅法:(返回值得同时删除键)删除值。
update⽅法是原地改变字典。
字典创建:⽤序列创建字典:输出结果:{'a': 1, 'b': 3, 'c': 12}
tp1 =(1, 3, 12)
tp2 =("a","b","c")
mapping=dict(zip(tp2,tp1))
mapping
还有一种方法创建字典:字典推导式(Dict Comprehension),与列表推导式类似。
cities=['oxford','beijing','tokyo','london']
countries=['uk','china','japan','uk']
d = {city:country for city,country in zip(cities,countries) if country=='uk'}
d
{'oxford': 'uk', 'london': 'uk'}