数字:包含整数,浮点数,布尔值,直接赋值即可,不可变
字符串:直接赋值即可,可以使用下标取值,不可变
列表(list):有序集合,可变,可以使用下标取值
元组(tuple):类似list,初始化后不能修改,不可变
字典(dict):使用键值对的方式存储和获取,查询快速,可变,
集合(set):类似字典,但没有key, 值不能重复,可用于去重,可变
enumerate :将一个可迭代对象组合为一个索引序列,同时列出数据和数据下标,返回元组对,一般用在 for 循环当中
enumerate(sequence, [start=0])
- sequence -- 一个序列、迭代器或其他支持迭代对象。
- start -- 下标起始位置。
zip 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表(python3 返回的是一个可迭代对象)
语法
zip([iterable, ...]) #一个或多个可迭代对象
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
利用 * 号操作符,可以将元组解压为列表
p = ['川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑', '沪']
d = [(0, '川'), (1, '鄂'), (2, '赣'), (3, '甘'), (4, '贵'), (5, '黔'), (6, '桂'), (7, '黑'), (8, '沪')]
index = range(5)
print(list(zip(index, p)))
print(list(zip(*d)))
输出:
[(0, '川'), (1, '鄂'), (2, '赣'), (3, '甘'), (4, '贵')]
[(0, 1, 2, 3, 4, 5, 6, 7, 8), ('川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑', '沪')]
operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为需要获取的数据在对象中的序号
a = [1,2,3]
>>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值,类似匿名函数lambda
使用几种方法,zip, enumerate和dict方法
注意,dict方法需要对象都是键值对(不是键值对的会被忽略),且元素0可哈希
p = ['川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑']
index = range(len(p))
print(dict(enumerate(p, 1)))
print(dict(zip(index, p)))
结果
{1: '川', 2: '鄂', 3: '赣', 4: '甘', 5: '贵', 6: '黔', 7: '桂', 8: '黑', 9: '沪'}
{0: '川', 1: '鄂', 2: '赣', 3: '甘', 4: '贵', 5: '黔', 6: '桂', 7: '黑', 8: '沪'}
一般需要对列表生产索引则使用enumerate打包成键值对
两个列表生产对应的字典则使用zip打包成键值对
如果要初始化值是一样的字典可以使用字典的fromkeys
比如值都初始化为0或空列表
d = ['川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑']
print(dict.fromkeys(d, 0))
print(dict.fromkeys(d, []))
结果
{'川': 0, '鄂': 0, '赣': 0, '甘': 0, '贵': 0, '黔': 0, '桂': 0, '黑': 0}
{'川': [], '鄂': [], '赣': [], '甘': [], '贵': [], '黔': [], '桂': [], '黑': []}
列表操作包含以下函数:
1、cmp(list1, list2):比较两个列表的元素
2、len(list):列表元素个数
3、max(list):返回列表元素最大值
4、min(list):返回列表元素最小值
5、list(seq):将元组转换为列表
对列表操作包含以下方法:
1、list.append(obj):在列表末尾添加新的对象
2、list.count(obj):统计某个元素在列表中出现的次数
3、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4、list.index(obj):从列表中找出某个值第一个匹配项的索引位置
5、list.insert(index, obj):将对象插入列表
6、list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7、list.remove(obj):移除列表中某个值的第一个匹配项
8、list.reverse():反向列表中元素
9、list.sort([func]):对原列表进行排序
使用字典最常用的三个方法:keys, values, items
遍历字典实例
provinces = {'川': 1, '鄂': 2, '赣': 3, '甘': 4, '贵': 5, '黔': 6, '桂': 7, '黑': 8}
print(provinces.keys())
print(provinces.values())
for key, value in provinces.items():
print(key, value, end=" , ")
打印结果
dict_keys(['川', '鄂', '赣', '甘', '贵', '黔', '桂', '黑'])
dict_values([1, 2, 3, 4, 5, 6, 7, 8])
川 1 , 鄂 2 , 赣 3 , 甘 4 , 贵 5 , 黔 6 , 桂 7 , 黑 8 ,
另外还有方法
要翻转前提:值唯一,因为key必须得要可以哈希,列出几种方式:
provinces = {'川': 1, '鄂': 2, '赣': 3, '甘': 4, '贵': 5, '黔': 6, '桂': 7, '黑': 8}
p1 = {v: k for k, v in provinces.items()}
p2 = dict((v, k) for k, v in provinces.items())
p3 = dict(zip(provinces.values(), provinces.keys()))
使用方法sort, operator.itemgett或sorted
import operator
p = {'川': 6, '鄂': 8, '赣': 5, '甘': 4, '贵': 3, '黔': 1, '桂': 7, '黑': 2}
print(sorted(p.items(), key=operator.itemgetter(1)))
print(sorted(p.items(), key=lambda x: x[1], reverse=True))
输出
[('黔', 1), ('黑', 2), ('贵', 3), ('甘', 4), ('赣', 5), ('川', 6), ('桂', 7), ('鄂', 8)]
[('鄂', 8), ('桂', 7), ('川', 6), ('赣', 5), ('甘', 4), ('贵', 3), ('黑', 2), ('黔', 1)]