Найти все позиции индекса в списке на основе частичной строки внутри элемента в списке

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

Мне нужна индексная позиция всех элементов, содержащих 'aa'. У меня возникли проблемы с комбинацией enumerate() с частичным сопоставлением строк. Я даже не уверен, должен ли я использовать enumerate.

Мне просто нужно вернуть позиции индекса: 0,2,5


person L Shaw    schedule 13.02.2013    source источник


Ответы (4)


Ваша идея использовать 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]
person pemistahl    schedule 13.02.2013
comment
Как можно расширить понимание списка вместо того, чтобы «аа» было, если [аа, bb] в elem ?? - person GrantRWHumphries; 17.04.2018

Без enumerate():

>>> mylist = ["aa123", "bb2322", "aa354", "cc332", "ab334", "333aa"]
>>> l = [mylist.index(i) for i in mylist if 'aa' in i]
>>> l
[0, 2, 5]
person TerryA    schedule 13.02.2013
comment
Это, вероятно, будет выполняться за O (n ^ 2), тогда как использование enumerate будет O (n). - person Johnsyweb; 13.02.2013
comment
Это вернет неправильный результат, если одна из строк, содержащих «аа», дублируется. - person John La Rooy; 13.02.2013

person    schedule
comment
как вы можете сделать это нечувствительным к регистру? - person abbood; 14.02.2017
comment
@abbood — по сравнению с s.lower() - person StoryTeller - Unslander Monica; 14.02.2017
comment
что, если я просто хочу получить один индекс только для первого совпадения? - person shashwat; 06.10.2017
comment
@shashwat - вам не нужно использовать выражение генератора в скобках, чтобы создать список. Вы можете использовать его для создания генератора gen = (), который затем вызываете next. - person StoryTeller - Unslander Monica; 06.10.2017
comment
если бы вы могли привести пример того, как я это использую? Я совершенно новичок в Python. - person shashwat; 07.10.2017
comment
@StoryTeller-UnslanderMonica Я новичок в python. Не могли бы вы дать простое объяснение, как читать ваши кодовые индексы = [i для i, s в перечислении (mylist), если 'aa' в s] Или вы могли бы написать код по-другому? - person user716255; 25.10.2020

person    schedule
comment
Это не отвечает на вопрос. При использовании этого метода будет выдана ошибка значения, но указан только list.index('an'). Метод не сможет найти годовой. - person mastersom; 26.11.2019
comment
Верно. Это неверный ответ на поставленный вопрос. - person Śubham; 19.05.2020