Ich habe eine Liste, in der Werte doppelt auftauchen können. Nun suche ich in der Liste nach einem Begriff und möchte den zugehörigen Index (Position des Wertes) haben. Wenn der Begriff mehrfach auftaucht, möchte ich eine Liste von Indizes haben. Wenn der gesuchte Begriff gar nicht vorkommt, reicht mir eine leere Liste als Antwort.
Muss man sich das selber basteln?
Eine (unsaubere) Idee:
Code: Alles auswählen
a = ["foo", "bar", "foo"]
def ListIndices(l, v):
tmp = l[:]
indices = []
while tmp.count(v) > 0:
index = tmp.index(v)
indices.append(index)
tmp[index] = None
return indices
print ListIndices(a, "foo") # [0, 2]
print ListIndices(a, "bar") # [1]
print ListIndices(a, None) # []
Damit
tmp.count(v) dekrementiert wird, muss ich einen gefundenen Wert irgendwie zerstören. Aus der Liste entfernen kann ich ihn aber nicht (z.B.
mit tmp.pop(index)), weil sich sonst die Indizes ändern. Ich muss den Wert an dieser Stelle "zurücksetzen", was ich hier mit
tmp[index] = None versuche. Somit könnte ich aber nie nach dem Wert
None suchen. Daher ist diese Idee nur sehr bedingt geeignet.