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

L Shaw
quelle

Antworten:

128
indices = [i for i, s in enumerate(mylist) if 'aa' in s]
Geschichtenerzähler - Unslander Monica
quelle
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]
pemistahl
quelle
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]
TerryA
quelle
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)
user11167492
quelle
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