zip()
实例:列表中每个列表元素记录个人的各科成绩,要求计算各科平均成绩
n个科目,m个学生
学生A:89 90 78 93 80
学生B:90 91 85 88 86
学生C:91 92 83 89 90.5
m, n = map(int, input().split())scores = []for i in range(m):scores.append(list(map(eval, input().split())))for i in zip(*scores):print(sum(i)/m)
>>> a = [[1,2,3], [4,5,6], [7,8,9]]>>> for i in zip(*a):print(i)(1, 4, 7)(2, 5, 8)(3, 6, 9)>>> print(*a)[1, 2, 3] [4, 5, 6] [7, 8, 9]
sorted()——排序
实例:重量排序
海豚 228kg
北极熊 0.75t
企鹅 35kg
海豹 0.35t
白鲸 1.35t
>>> ls[['海豚', '228kg'], ['北极熊', '0.75t'], ['企鹅', '35kg'], ['海豹', '0.35t'], ['白鲸', '1.35t']]>>> print(sorted(ls, key = lambda d:eval(d[1][:-1])*1000 if d[1][-1] == 't' else eval(d[1][:-2])))[['企鹅', '35kg'], ['海豚', '228kg'], ['海豹', '0.35t'], ['北极熊', '0.75t'], ['白鲸', '1.35t']]
切片vs方法replace
在数据脱敏的应用中,replace方法是靠不住的,因为repalce中的参数1,可能出现在原字符串任何位置,这时采用切片拼接的方法较为合适
列表尾部添加
>>> ls = list(range(100,60,-10))>>> ls[100, 90, 80, 70]>>> ls[len(ls):] = 'abc'>>> ls[100, 90, 80, 70, 'a', 'b', 'c']
enumerate列表推导标号
>>> ls = 'MOLLY'>>> [(i,s) for i,s in enumerate(ls)][(0, 'M'), (1, 'O'), (2, 'L'), (3, 'L'), (4, 'Y')]
列表推导
实现平铺
>>> ls = [[1,2,3], [4,5,6], [7,8,9]]>>> [b for a in ls for b in a][1, 2, 3, 4, 5, 6, 7, 8, 9]
过滤元素
>>> import random>>> ls = [random.randint(-10,10) for i in range(10)]>>> ls[10, -1, -6, 10, -5, 0, 3, 5, -6, 9]>>> [x for x in ls if x > 0][10, 10, 3, 5, 9]
矩阵转置
>>> matrix = [[1,2,3,4], [5,6,7,8], [9,10,11,12]]>>> [[row[i] for row in matrix] for i in range(4)][[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
或使用zip和list实现
>>> list(zip(*matrix))[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
或变为纯列表元素
>>> list(list(x) for x in zip(*a))[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
列表推导中可以使用函数或复杂表达式
元组的访问和处理速度比列表更快,可用作字典的键,而列表不可以。
字典序列解包
>>> def demo(a, b, c, d):print(a, b, c, d)>>> demo(**{'a':1, 'c':3}, **{'b':2, 'd':4})1 2 3 4>>> {'x':1, **{'y':2}}{'x': 1, 'y': 2}
生成器推导式
当生成器对象所有元素访问完毕后,如果需要重新访问其中的元素,必须重新创建该生成器对象。
>>> g = ((i+2)**2 for i in range(10))>>> g<generator object <genexpr> at 0x10301f510>>>> tuple(g)(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)>>> list(g) # 元素已遍历结束[]>>> g = ((i+2)**2 for i in range(10))>>> list(g)[4, 9, 16, 25, 36, 49, 64, 81, 100, 121]>>> g = ((i+2)**2 for i in range(10))>>> g.__next__() # 单步迭代4>>> g.__next__()9>>> g.__next__()16>>> g.__next__()25>>> g.__next__()36>>> g.__next__()49>>> g.__next__()64>>> g.__next__()81>>> g.__next__()100>>> g.__next__()121>>> g.__next__()Traceback (most recent call last):File "<pyshell#37>", line 1, in <module>g.__next__()StopIteration>>> g = ((i+2)**2 for i in range(10))>>> for i in g: # 直接循环迭代print(i, end=' ')4 9 16 25 36 49 64 81 100 121
如果觉得《2.语法特性(组合数据类型)》对你有帮助,请点赞、收藏,并留下你的观点哦!