给我看看一些酷炫的Python列表解析

14 投票
8 回答
9213 浏览
提问于 2025-04-15 23:03

Python和一些其他编程语言的一个大优点就是它们有一种叫做列表推导式的功能。这个功能让程序员可以用一行代码写出复杂的表达式。刚开始可能会觉得有点难懂,但一旦习惯了这种语法,就会发现它比那些嵌套的复杂循环要好用得多。

所以,大家来分享一下列表推导式的一些酷炫用法吧。(这里的酷炫,我指的是实用)可以是编程比赛中的应用,或者是实际项目中的用法。

举个例子:对一个矩阵 mat 进行转置

>>> mat = [
...        [1, 2, 3],
...        [4, 5, 6],
...        [7, 8, 9],
...       ]

>>> [[row[i] for row in mat] for i in [0, 1, 2]]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

请附上这个表达式的说明,以及它的使用场景(如果可能的话)。

8 个回答

9

要对一个矩阵 mat 进行转置:

>>> [list(row) for row in zip(*mat)]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
9

我经常使用简洁的写法来构建字典:

my_dict = dict((k, some_func(k)) for k in input_list)

注意,Python 3 有专门的字典简洁写法,所以可以这样写:

my_dict = {k:some_func(k) for k in input_list}

如果你想从一个元组的列表中构建类似CSV的数据:

data = "\n".join(",".join(x) for x in input)

这其实不是列表的简洁写法,但仍然很有用:从一组“切点”中生成一个范围的列表:

ranges = zip(cuts, cuts[1:])
16

很多人不知道,Python 允许你在列表推导式中使用 if 来过滤结果:

>>> [i for i in range(10) if i % 2 == 0]
[0, 2, 4, 6, 8]

撰写回答