根据列表中项目内的部分字符串查找列表中的所有索引位置

Posted

技术标签:

【中文标题】根据列表中项目内的部分字符串查找列表中的所有索引位置【英文标题】:Find all index position in list based on partial string inside item in list 【发布时间】:2013-01-28 17:56:42 【问题描述】:
mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]

我需要包含'aa' 的所有项目的索引位置。我无法将enumerate() 与部分字符串匹配结合起来。我什至不确定我是否应该使用枚举。

我只需要返回索引位置:0,2,5

【问题讨论】:

【参考方案1】:

您使用enumerate() 的想法是正确的。

indices = []
for i, elem in enumerate(mylist):
    if 'aa' in elem:
        indices.append(i)

或者,作为列表理解:

indices = [i for i, elem in enumerate(mylist) if 'aa' in elem]

【讨论】:

如何将列表理解扩展到而不是 "if 'aa'" 为 "if ["aa","bb"] in elem" ??【参考方案2】:
indices = [i for i, s in enumerate(mylist) if 'aa' in s]

【讨论】:

你如何让它不区分大小写? @abbood - 通过比较s.lower() 如果我只想为第一个匹配获取单个索引怎么办? @shashwat - 您不必使用括号中的生成器表达式来创建列表。你可以使用它来创建一个生成器gen = (),然后调用next 如果可以请举例说明我如何使用它?我对 Python 完全陌生。【参考方案3】:

没有enumerate()

>>> mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]
>>> l = [mylist.index(i) for i in mylist if 'aa' in i]
>>> l
[0, 2, 5]

【讨论】:

这很可能在 O(n^2) 中运行,而使用 enumerate 将是 O(n)。 如果包含 'aa' 的字符串之一重复,这将返回错误结果。【参考方案4】:
spell_list = ["Tuesday", "Wednesday", "February", "November", "Annual", "Calendar", "Solstice"]

index=spell_list.index("Annual")
print(index)

【讨论】:

这没有回答问题。使用该方法但只指定 list.index('an') 时会抛出值错误。该方法将无法找到年度。 对。这是对所提问题的错误答案。

以上是关于根据列表中项目内的部分字符串查找列表中的所有索引位置的主要内容,如果未能解决你的问题,请参考以下文章

根据不同类型的另一个列表中的项目查找一个列表中的项目

使用流 API 查找列表中项目的所有索引

在字符串列表中进行部分搜索

如何在python列表中查找某个元素的索引

查找最接近未完全排序的列表中的值的项目的索引

在一个列表中查找不在另一个列表中的项目[重复]