python - знайти позицію індексу в списку на основі часткового рядка


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

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

Мені просто потрібно повернути індексні позиції: 0,2,5

Відповіді:


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

як ви можете зробити це не враховуючи регістр?
настоятель

1
@abbood - Порівнявши зs.lower()
StoryTeller - Unslander Monica

що робити, якщо я просто хочу отримати єдиний індекс лише для першого збігу?
shashwat

@shashwat - Вам не потрібно використовувати вираз генератора в дужках для створення списку. Ви можете використовувати його для створення генератора, gen = ()який потім викликати next.
StoryTeller - Unslander Monica

якби ви могли б навести приклад того, як я цим користуюся? Я абсолютно новачок у 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]

Як можна розширити розуміння списку замість "if 'aa'", щоб бути "if [" aa "," bb "] в елемі" ??
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
Правильно. Це неправильна відповідь на поставлене запитання.
Śubham
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.