将函数应用于循环项

Nai*_*aba 0 python iteration loops

请考虑以下代码:

f = open('file.txt')

for l in f:
    k = l.strip() # Remove the newline character.
    print(k)

f.close()
Run Code Online (Sandbox Code Playgroud)

我想自动删除换行符.我知道我能做到:

for k in [l.strip() for l in f]:
    print(k)
Run Code Online (Sandbox Code Playgroud)

但这需要循环f两次的长度(并将整个内容加载到内存中).我想知道是否有更像Pythonic的东西:

for lambda l: l.strip() in f:
    print(l)
Run Code Online (Sandbox Code Playgroud)

或者只是:

for l.strip() in f:
    print(l)
Run Code Online (Sandbox Code Playgroud)

当然,这些都不起作用.要了解如何将其应用于其他地方,以下是嵌套列表的示例:

d =  [['hi'], ['hello'], ['howdy']]
for item in d:
    item = item[0] # Get the nested item.
    if item == 'hello':
         print(item)
Run Code Online (Sandbox Code Playgroud)

iCo*_*dez 5

您可以使用生成器表达式:

for k in (l.strip() for l in f):
    print(k)
Run Code Online (Sandbox Code Playgroud)

这与列表理解非常相似,不同之处在于它会懒惰地(逐个)生成项目,而不是一次性将它们全部收集到列表中.因此,我们只循环一次的长度,f同时避免将所有内容全部转储到内存中.