python列表推导式


昨天python课上老师进行了随堂小测,可能是好久没写过了,其中有一道题让我觉得自己错得特别不应该,题目是这样的:

dlist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
alist = [__ for x in __
]
print(a_list)


输出为:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

一眼看上去很是简单(可能除了我以外的人仔细看也是很简单),觉得不过是列表推导式而已,但当时自己就是脑袋不太灵光,死活没想出来要怎么写,觉得不套循环怎么都写不好,但又因为要占平时成绩,拼死拼活从脑子里挤出一点东西,代码如下:

1
2
3
4
d_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
a_list = [[x, y, z] for x in d_list[0] for y in d_list[1] for z in d_list[2] if
d_list[0].index(x) == d_list[1].index(y) == d_list[2].index(z)]
print(a_list)

交上去之后越想越觉得自己蠢,不说自己写的这种列表推导式麻烦,老师想让我写的也肯定不是这样的,于是赶紧查找资料把列表推导式重新看了一下。


嵌套列表推导式

嵌套列表推导式看起来有些复杂,推导部分是根据嵌套的顺序进行执行,过滤条件仍放在推导式最后,就如上题的正确写法如下

1
2
3
d_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
a_list = [[temp[i] for temp in d_list] for i in range(3)]
print(a_list)

当然,即使是现在我也还不是很熟练嵌套列表推导式的实际应用,这只是我在python学习中遇到的一点困惑,故分享出来。

如有更深入的学习要求,可以参考以下文章:Python列表推导式和嵌套的列表推导式。这里由于个人水平不佳,故不多赘述。