Skip to main content
 首页 » 编程设计

从列表返回间隔的 Pythonic 方法

2025年05月04日9zhoujg

我想知道是否有更 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