我想知道是否有更 pythonic 的方法来从知道开始和结束值的列表中获取间隔,同时只遍历列表一次。
我想要的示例不是非常 pythonic 方式(存储“Ann”和“John”之间的所有名称):
all_names = []
start_adding = False
for name in names:
if name == 'Ann':
start_adding = True
if start_adding:
all_names.append(name)
if name == 'John':
break
请您参考如下方法:
该解决方案仅遍历列表一次。而且它只使用标准库中的一个表达式和函数! :)
import itertools as it
l = ['Bill', 'Patrick', 'Aaron', 'Ann',
'Jane', 'Rachel', 'Beatrix',
'John', 'Basil', 'Alice', ]
l = iter(l)
print(
list(
it.chain(
it.dropwhile(lambda _: True, iter(lambda: next(l), 'Ann')),
iter(lambda: next(l), 'John')
)
)
)
输出:
['Jane', 'Rachel', 'Beatrix']
另外 - 演示:http://ideone.com/eOLG6o
