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

如何在Python列表中定位完整目标短语的首个元素索引

如何在列表中定位特定完整短语的首个元素索引

问题场景

给定测试数据:

data = {"text":["Map:","Internet",
"Subscriptions","","Map:",
"Adult","Literacy","and",
"Numeracy","|","8"]}

需要定位目标短语Map: Adult Literacy and Numeracy对应的首个元素Map:的索引,正确结果应为4,但列表中有两个Map:,需区分出属于目标完整短语的那个。

最初尝试的问题

最初编写的代码如下:

teststring = "Map: Adult Literacy and Numeracy"
teststring_split = teststring.split(" ")

data = {"text":["Map:","Internet",
"Subscriptions","","Map:",
"Adult","Literacy","and",
"Numeracy","|","8"]}

if teststring in " ".join(data["text"]):
    idx = data["text"].index(teststring.split(' ')[0])
    print(idx)

输出结果为0,因为index()方法仅返回第一个匹配元素的索引,无法判断该元素是否属于目标完整短语。

修改后的代码及困惑

参考@Alexander的思路修改后的代码:

for i in range(len(data['text'])):
    if data['text'][i] == teststring_split[0]:
        for m in range(len(teststring_split)):
            if data['text'][i + m] == teststring_split[m]:
                print(teststring_split[m])

该代码能输出目标短语的所有元素,但无法在确认匹配完整短语后获取正确索引4。

解决方案

我们需要在遍历过程中验证从当前索引开始的连续元素是否完全匹配目标短语的拆分列表,仅当全部匹配时返回当前索引:

teststring = "Map: Adult Literacy and Numeracy"
teststring_split = teststring.split(" ")

data = {"text":["Map:","Internet",
"Subscriptions","","Map:",
"Adult","Literacy","and",
"Numeracy","|","8"]}

text_list = data["text"]
phrase_length = len(teststring_split)

# 遍历所有可能的起始索引,预留足够长度容纳整个短语
for i in range(len(text_list) - phrase_length + 1):
    # 对比连续切片与目标拆分列表
    if text_list[i:i+phrase_length] == teststring_split:
        print(i)  # 输出4
        break  # 找到首个匹配项后停止遍历

代码说明

  • 先计算目标短语拆分后的长度phrase_length,避免遍历过程中出现索引越界问题。
  • 使用切片text_list[i:i+phrase_length]直接对比连续元素与目标拆分列表,逻辑简洁高效。
  • 找到第一个匹配的起始索引后立即输出并终止遍历,满足“获取首个元素索引”的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:10:26