Python - Finden Sie die Indexposition in der Liste basierend auf der Teilzeichenfolge


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

Ich benötige die Indexposition aller Elemente, die 'aa' enthalten. Ich habe Probleme, enumerate () mit partiellem String-Matching zu kombinieren. Ich bin mir nicht mal sicher, ob ich enumerate verwenden soll.

Ich muss nur die Indexpositionen zurückgeben: 0,2,5

Antworten:


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

Wie können Sie die Groß- und Kleinschreibung nicht berücksichtigen?
Abbood

1
@abbood - Im Vergleich zus.lower()
StoryTeller - Unslander Monica

Was ist, wenn ich nur für das erste Match einen einzelnen Index erhalten möchte?
Shashwat

@shashwat - Sie müssen den Generatorausdruck in den Klammern nicht verwenden, um eine Liste zu erstellen. Sie können damit einen Generator erstellen, gen = ()den Sie dann aufrufen next.
Geschichtenerzähler - Unslander Monica

Wenn Sie bitte ein Beispiel geben könnten, wie ich das benutze? Ich bin völlig neu in Python.
Shashwat

20

Ihre Idee enumerate()war richtig.

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

Alternativ als Listenverständnis:

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

Wie könnte das Listenverständnis erweitert werden, anstatt "wenn 'aa'" "wenn [" aa "," bb "] in elem" zu sein?
GrantRWHumphries

12

Ohne 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
Dies wird wahrscheinlich in O (n ^ 2) ausgeführt, wohingegen die Verwendung von enumerate O (n) ist.
Johnsyweb

2
Dies gibt ein falsches Ergebnis zurück, wenn eine der Zeichenfolgen, die 'aa' enthalten, dupliziert wird.
John La Rooy

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

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

1
Dies beantwortet die Frage nicht. Wenn Sie diese Methode verwenden, wird ein Wertefehler ausgegeben, der jedoch nur list.index ('an') angibt. Die Methode kann nicht jährlich finden.
Mastersom

1
Richtig. Dies ist eine falsche Antwort auf die gestellte Frage.
Śubham
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.