将 for 循环更改为列表理解

Change for loop into list comprehension

所以我的输入文件 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 循环转换为列表理解?还有人告诉我,在大多数情况下,列表理解比 运行 更快。是这样吗?在可能的情况下,将迭代操作转换为更短的列表理解总是一个好习惯吗?

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

关于您的其他问题:理解通常更快,是的,但并不总是那么显着,而且如果没有具体的用例,很难抽象地发表评论。

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