将 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 循环。
所以我的输入文件 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 循环。