You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历列表时获取每个目标元素前三个元素的实现问题

问题:遍历列表时匹配当前元素而非第一个重复元素

我尝试遍历一个列表,当找到特定字符串时提取该元素的前三个元素。以下是示例代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:57:08