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

如何获取列表中首个存在于另一列表的元素的索引?

如何获取列表中首个存在于另一列表的元素的索引?

先明确下你的场景:

给定两个列表:
punc = ['.', '!', '?']
tokens = ['today', 'i', 'went', 'to', 'the', 'park', '.', 'it', 'was', 'great', '!']
需要找到tokens里第一个属于punc的元素的索引,预期结果是6。

下面是几种靠谱的实现方式:

1. 直观的循环遍历法

这是最容易理解的基础写法,逐个检查每个元素,找到第一个匹配项就立刻停止:

punc = ['.', '!', '?']
tokens = ['today', 'i', 'went', 'to', 'the', 'park', '.', 'it', 'was', 'great', '!']

target_index = -1
for idx, token in enumerate(tokens):
    if token in punc:
        target_index = idx
        break

print(target_index)  # 输出:6

这里用enumerate()同时拿到元素的索引和值,一旦找到符合条件的元素就用break跳出循环,确保拿到的是第一个匹配的索引。

2. Pythonic的生成器表达式写法

要是想代码更简洁优雅,用生成器表达式配合next()函数是个很好的选择:

punc = ['.', '!', '?']
tokens = ['today', 'i', 'went', 'to', 'the', 'park', '.', 'it', 'was', 'great', '!']

# 生成所有匹配的索引,next()直接取第一个
target_index = next((idx for idx, token in enumerate(tokens) if token in punc), -1)

print(target_index)  # 输出:6

这里next()的第二个参数-1是默认值,如果tokens里没有任何元素在punc中,就会返回-1,避免程序抛出StopIteration异常。

优化小技巧

如果你的punc列表很大,token in punc的查找效率会比较低(时间复杂度O(n))。这时候可以把punc转换成集合,集合的查找是O(1)的,能显著提升性能:

punc_set = set(punc)
target_index = next((idx for idx, token in enumerate(tokens) if token in punc_set), -1)

内容的提问来源于stack exchange,提问作者jo_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:37:27