遍历列表时获取每个目标元素前三个元素的实现问题
问题:遍历列表时匹配当前元素而非第一个重复元素
我尝试遍历一个列表,当找到特定字符串时提取该元素的前三个元素。以下是示例代码:
my_list = ['one', 'two', 'three', 'four', 'five', 'six', 'five'] new = [] for i in my_list: if i == 'five': context = (my_list[my_list.index(i)-3], my_list[my_list.index(i)-2], my_list[my_list.index(i)-1]) print(context)
当前代码输出:
('two', 'three', 'four') ('two', 'three', 'four')
问题在于列表中有两个"five",但代码始终取第一个"five"的前三个元素。我希望输出为:
('two', 'three', 'four') ('four', 'five', 'six')
如何修改代码,使其匹配当前遍历到的"five"而非仅第一个?
解决方案
问题出在my_list.index(i)这个方法上:它只会返回列表中第一个匹配i的元素索引,不管你当前遍历到第几个重复项。
要解决这个问题,遍历的时候需要同时获取元素的当前索引和元素本身,用enumerate()函数就能实现:
my_list = ['one', 'two', 'three', 'four', 'five', 'six', 'five'] new = [] for idx, item in enumerate(my_list): if item == 'five': # 可选:添加索引判断,避免开头的元素导致索引越界 if idx >= 3: context = (my_list[idx-3], my_list[idx-2], my_list[idx-1]) print(context)
运行这段代码后,输出就会符合预期:
('two', 'three', 'four') ('four', 'five', 'six')
补充说明
如果列表中存在索引小于3的"five"(比如前三个元素里就有),直接取idx-3会触发索引错误。如果需要处理这种边界情况,可以根据需求调整逻辑,比如跳过这类元素,或者取从列表开头到当前元素的前几个。
内容的提问来源于stack exchange,提问作者Kevin Veeder
相关产品推荐
相关产品推荐

