赞
踩
如下是Python官方文档中列表推导式部分的译文,笔者对于该部分也是初学,只能从官方文档学起了。有不合适的地方还望指正,谢谢。
- squares = []
- for x in range(10):
- squares.append(x**2)
- print(squares)
'运行
输出
结果:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
'运行
我们也可以通过下面的方式获得相同的列表:
squares = [x**2 for x in range(10)]
'运行
这也等价于下面的方式,但列表推导式的方式更简单。
squar = map(lambda x:x**2,range(10))
'运行
- >>> [(x,y)for x in [1,2,3] for y in [3,1,4] if x != y]
- [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
这等价于:
- >>> combs = []
- >>> for x in [1,2,3]:
- for y in [3,1,4]:
- if x != y:
- combs.append((x,y))
-
- >>> combs
- [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
注意:for语句和if语句在这两段程序片中的顺序是相同的。
- >>> vec = [-4,-2,0,2,4]
- >>> #用vec中元素的倍数,创建一个数组
- >>> [x*2 for x in vec]
- [-8, -4, 0, 4, 8]
- >>> #过滤列表,删除列表中的负数
- >>> [x for x in vec if x >= 0]
- [0, 2, 4]
- >>> #对列表中的每个元素应用一个函数
- >>> [abs(x) for x in vec]
- [4, 2, 0, 2, 4]
- >>> #对每个元素调用一个方法
- >>> freshfruit = ['000banana00','0000loganberry0','0passion fruit00000']
- >>> [weapon.strip('0') for weapon in freshfruit]#str.strip(ch) : 删除字符串开头结尾处的字符ch
- ['banana', 'loganberry', 'passion fruit']
- >>> #创建一个2元元组,比如(number,square)
- >>> [(x,x**2) for x in range(6)]
- [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
- >>> #元组必须用括号包围,不然就会出错
- >>> [x,x**2 for x in range(6)]
- SyntaxError: invalid syntax
- >>> #将一个多维数组转化为一个一维数组
- >>> vec = [[1,2,3],[4,5,6],[7,8,9]]
- >>> [num for elem in vec for num in elem]
- [1, 2, 3, 4, 5, 6, 7, 8, 9]
列表推导式可以包含复杂表达式和嵌套函数;
- >>> from math import pi
- >>> [str(round(pi,i)) for i in range(1,6)]
- ['3.1', '3.14', '3.142', '3.1416', '3.14159']
对于round函数,其本身的执行与Python的版本有关和计算机的精度有关,详情请参考下面的链接,此处可简单理解为取pi的i位有效数字。- >>> matrix = [
- [1,2,3,4],
- [5,6,7,8],
- [9,10,11,12],
- ]
- >>> matrix
- [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
使用下面的列表推导式转置行和列:
- >>> [[row_list[j] for row_list in matrix]for j in range(4)]
- [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
从前面的小节中可以看出,嵌套的列表推导式是在for循环的body中进行计算的,所以上满的例子等同于:
- >>> transposed = []
- >>> for j in range(4):
- transposed.append([row[j] for row in matrix])
- >>> transposed
- [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
也等同于:
- >>> transposed
- [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
- >>> transposed = []
- >>> for j in range(4):
- #下面的三行实现了嵌套列表推导式
- transposed_row = []
- for row_list in matrix:
- transposed_row.append(row_list[j])
- transposed.append(transposed_row)
-
- >>> transposed
- [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
在现实情况中,与复杂的流式语句相比,你可能更喜欢Python的内置函数。那么,zip()函数就更适合与完成上面的工作了。
- >>> zipp = zip(*matrix)
- >>> list(zipp)
- [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]]
关于zip()函数,
请参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。