python-根据部分字符串在列表中查找索引位置


76
mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]

我需要所有包含“ aa”的项目的索引位置。我在将enumerate()与部分字符串匹配结合在一起时遇到麻烦。我什至不确定我是否应该使用枚举。

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

Answers:


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

如何使它不区分大小写?
Abbood

1
@abbood-通过比较s.lower()
StoryTeller-Unslander Monica

如果我只想为第一个匹配获取单个索引怎么办?
shashwat

@shashwat-您不必使用方括号中的generator表达式来创建列表。您可以使用它创建一个生成器gen = (),然后调用next它。
StoryTeller-Unslander Monica's

如果可以,请举例说明我如何使用它?我对Python完全陌生。
shashwat

20

您使用的想法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]

列表推导如何扩展到elem中的“ if [“ aa”,“ bb”]而不是“ if'aa'”?
GrantRWHumphries

12

没有enumerate()

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

6
这很可能在O(n ^ 2)中运行,而使用枚举将是O(n)。
Johnsyweb

2
如果包含“ aa”的字符串之一重复,将返回错误的结果。
John La Rooy

-2
spell_list = ["Tuesday", "Wednesday", "February", "November", "Annual", "Calendar", "Solstice"]

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

1
这不能回答问题。使用此方法时,将仅抛出list.index('an')引发值错误。该方法将无法找到年度。
mastersom

1
对。这是对所提问题的错误答案。
乌伯汉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.