失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 2.语法特性(组合数据类型)

2.语法特性(组合数据类型)

时间:2023-08-17 17:35:52

相关推荐

2.语法特性(组合数据类型)

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.语法特性(组合数据类型)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。