Seite 1 von 1

Suche Index zum Wert in einer Liste [PHP: array_search()]

Verfasst: Donnerstag 14. Dezember 2006, 09:58
von droptix
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.

Verfasst: Donnerstag 14. Dezember 2006, 11:12
von jens
Ich würde es so machen:

Code: Alles auswählen

a = ["foo", "bar", "foo"]

def ListIndices(l, v):
    indices = []
    for index, item in enumerate(l):
        if item == v:
            indices.append(index)
            
    return indices


print ListIndices(a, "foo") # [0, 2]
print ListIndices(a, "bar") # [1]
print ListIndices(a, None) # []
EDIT: Oder kürzer:

Code: Alles auswählen

a = ["foo", "bar", "foo"]

def ListIndices(l, v):
    return [index for index, item in enumerate(l) if item==v]


print ListIndices(a, "foo") # [0, 2]
print ListIndices(a, "bar") # [1]
print ListIndices(a, None) # []
:lol:

Ganz nett!

Verfasst: Donnerstag 14. Dezember 2006, 11:34
von droptix
Ganz nett! Es gibt immer wieder was zu lernen... danke!