Ami*_*tad 2 python list-comprehension
我需要在包含特定字符串的文本文件中找到一行,然后将该行和其后面的所有行追加到列表中.这就是我完成它的方式..
file1 = open("input.txt", "r")
always_print = False
lines = file1.readlines()
output = []
for line in lines:
if always_print or "def set" in line: #def set is the string i want
output.append(line)
always_print = True
Run Code Online (Sandbox Code Playgroud)
虽然这很好用,但我尝试使用列表推导做同样的事情.这就是我得到的:
lines = [ item.strip() for item in open("input.txt")]
always_print = False
output = [item for item in lines if "def set" or print_always in item]
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,因为当找到所需的字符串时我没有设置always_print = True.我如何在列表理解中做到这一点?
使用itertools.dropwhile()查找包含您的第一行def set:
from itertools import dropwhile
output = list(dropwhile(lambda l: 'def set' not in l, lines))
Run Code Online (Sandbox Code Playgroud)
dropwhile()将跳过lines与您的测试不符的任何条目; 一旦匹配它就会停止测试,并从那里开始简单地产生一切.
dropwhile()返回一个迭代器; 我list()在这里使用它将它转换为行列表,但你也可以将它作为另一个循环的基础,比如剥离换行符等.
演示:
>>> from itertools import dropwhile
>>> lines = '''\
... foo
... bar
... def set():
... spam
... ham
... eggs
... '''.splitlines(True)
>>> list(dropwhile(lambda l: 'def set' not in l, lines))
['def set():\n', ' spam\n', ' ham\n', ' eggs\n']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
797 次 |
| 最近记录: |