将for循环转换为列表推导式

1 投票
6 回答
2940 浏览
提问于 2025-04-16 13:55

大家好,

我有一些代码是用来从一个文件中读取特定的行,我想知道用列表推导式和生成器表达式/函数来写的话,哪个会运行得更快。如果确实更快的话,代码应该怎么写呢?我还在学习Python。谢谢大家的帮助!

input = open('C:/.../list.txt', 'r')
output = open('C:/.../output.txt', 'w')

x=0

for line in input:
    x = x+1
    if x > 2 and x < 5:
        output.write(line)

列表文件包含

1
2
3
4
5

新文件中的输出是

3
4

6 个回答

1

并不是说更快,但如果你想用列表推导式的话:

    output.writelines([line for (x, line) in enumerate(input) if 1 < x < 4])

这里假设你是根据文件的实际行数来定位,而不是根据文件中读取的值(根据你给x赋值的方式来看,这个假设是正确的)。

2

如果你想用生成器来实现这个功能:

output.writelines(line for line in input if 2 < int(line) < 5)
6

不需要使用列表推导式。

output.write(''.join(itertools.islice(inputfile, 2, 4))

撰写回答