首页 > 解决方案 > 将 for 循环更改为列表理解

问题描述

所以我的输入文件f就像

5 100
2 200
8 300

我的输出是一个元组列表:

[(5, 100), (2, 200), (8, 300)]

我的代码如下。

f = open(file_name, "r")
lines = f.readlines()

sets= []
for line in lines:
    a, b= line.split(' ')
    sets.append((int(a), int(b)))

是否可以将 for 循环转换为列表理解?也有人告诉我列表理解在大多数情况下运行得更快。是这样吗?在可能的情况下将迭代操作转换为更短的列表理解总是一个好习惯吗?

标签: pythonlist-comprehension

解决方案


with open(file_name, "r") as f:
    sets = [tuple(map(int, line.split(" "))) for line in f]

关于您的其他问题:理解通常更快,是的,但并不总是如此,如果没有具体的用例,很难在摘要中发表评论。

您的第二个问题更加固执己见,并且再次因每个用例而异。对于像这样相对简单的操作,我发现列表推导比 for 循环更具可读性和重点(尽管我倾向于尽可能避免嵌套推导 - 注意我使用map而不是嵌套推导在我的回答中——这只是个人喜好,真的)。此外,并不是所有可以写成 for 循环的东西都可以重写为推导式,也不是所有可以写成推导式的东西都一定写成推导式。对于更复杂的操作,将其塞进一个理解中通常会使它变得非常不可读,因此在这些情况下,您几乎肯定最好坚持使用 for 循环。


推荐阅读