55 Stimmen

Ermitteln des ersten Listenindex, der eine Teilzeichenkette enthält?

Für Listen wird die Methode list.index(x) gibt den Index in der Liste des ersten Elements zurück, dessen Wert x . Aber wenn ich innerhalb der Listenelemente sehen wollen, und nicht nur auf die gesamte Elemente, wie mache ich die meisten Pythoninc Methode für diese?

Zum Beispiel, mit

l = ['the cat ate the mouse',
     'the tiger ate the chicken',
     'the horse ate the straw']

würde diese Funktion Folgendes zurückgeben 1 versehen mit dem Argument tiger .

42voto

kennytm Punkte 488916

Eine nicht-klebrige Methode:

def index_containing_substring(the_list, substring):
    for i, s in enumerate(the_list):
        if substring in s:
              return i
    return -1

39voto

lev Punkte 2467

Mit einem Einzeiler:

index = [idx for idx, s in enumerate(l) if 'tiger' in s][0]

9voto

John La Rooy Punkte 278961

Variante der abyx-Lösung (optimiert, um anzuhalten, wenn die Übereinstimmung gefunden ist)

def first_substring(strings, substring):
    return next(i for i, string in enumerate(strings) if substring in string)

Wenn Sie vor 2.6 sind, müssen Sie die next() am Ende

def first_substring(strings, substring):
    return (i for i, string in enumerate(strings) if substring in string).next()

3voto

Etienne Perot Punkte 4464
def find(l, s):
    for i in range(len(l)):
        if l[i].find(s)!=-1:
            return i
    return None # Or -1

3voto

Max Shawabkeh Punkte 36359

Das ist ziemlich raffiniert und ziemlich effizient.

>>> def find(lst, predicate):
...     return (i for i, j in enumerate(lst) if predicate(j)).next()
... 
>>> l = ['the cat ate the mouse','the tiger ate the chicken','the horse ate the straw']
>>> find(l, lambda x: 'tiger' in x)
1

Das einzige Problem ist, dass es StopIteration auslöst, wenn das Element nicht gefunden wird (obwohl das leicht zu beheben ist).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X