Python iter()的多个sentinel值?

Python iter()的多个sentinel值?,python,Python,我正在尝试通过列表理解从文件中获取行,直到到达一个带有“0”的行,如下所示: with open('input.txt', 'r') as file: lines = [line.strip() for line in iter(file.readline, '0')] 问题是“0”可能不在最后一行,在这种情况下,它实际上是“0\n”。我知道我能行 for line in file: line = line.strip() if line == '0':

我正在尝试通过列表理解从文件中获取行,直到到达一个带有“0”的行,如下所示:

with open('input.txt', 'r') as file:
    lines = [line.strip() for line in iter(file.readline, '0')]
问题是“0”可能不在最后一行,在这种情况下,它实际上是“0\n”。我知道我能行

for line in file:
    line = line.strip()
    if line == '0':
        break
    else:
        lines.append(line)
但那太可怕了,我简直无法忍受看它。我是戏剧女王吗?是否有一种方法可以同时使用“0”和“0\n”作为sentinel值,或者在sentinel值检查它之前删除iter()内部的读线?

您可以尝试:

with open('input.txt', 'r') as file:
    lines = [line for line in iter(lambda: str.strip(file.readline()), '0')]

但我不喜欢它…

类似于line-in的
(line.strip()用于line-in-file):
是有效的,而且在我看来不那么难看。@martineau不是我想要的答案,但这是一个我会经常使用的好技巧!谢谢。
strip()
将删除行尾的任何换行符,因此您只需检查
'0'
-一件事-之后。i、 没有多个哨兵可以监视。作为主持人,我发现你的“可怕”版本是干净的、清晰的、易读的和通俗的。使用
iter
的理解是丑陋的,而使用
iter
+
lambda
的答案更糟糕。