Hallo Forum-Nutzer,
Kann mir jemand helfen, wie man die Position eines Tupels in einer liste bestimmt nach der enthaltenen Zahl?
Beispiel:
ds= [(1,2),(3,1),(5,3),(5,1),(4,1)]
Ich würde die Funktion Zahlenthalten(liste, zahl ), würde ich folgendermaßen definieren:
def Zahlenthalten(liste, zahl ):
for (x,y) in list:
if y == zahl:
t= (x,y)
return xs.index(t)
Jedoch bekomme ich dann nur den Index des y ausgegeben.
Positionsindex eines Tupels in eine Liste
Code: Alles auswählen
ds = [(1,2),(3,1),(5,3),(5,1),(4,1)]
def zahl_enthalten(liste, zahl):
return [index for index, (x,y) in enumerate(liste) if x == zahl or y == zahl]
print(zahl_enthalten(ds, 1))
>>> [0, 1, 3, 4]
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Was ist denn „thalten” für ein Verb? Zusammengesetzte Funktionsnamen trennt man per _.
`xs` ist nicht definiert.
Wenn die Zahl nicht gefunden wird, ist `t` nicht definiert, und es gibt einen UnboundLocalError.
Eigentlich würde man einen ValueError erwarten.
Bei einer Funktion, die `zahl_enthalten` heißt, würde man aber einen Wahrheitswert als Rückgabewert erwarten.
Und ich verstehe wie __deets__ nicht, was Du eigentlich willst. Du bekommst doch einen Index.
`xs` ist nicht definiert.
Wenn die Zahl nicht gefunden wird, ist `t` nicht definiert, und es gibt einen UnboundLocalError.
Eigentlich würde man einen ValueError erwarten.
Code: Alles auswählen
def zahl_enthalten(liste, zahl):
found_index = None
for index, (x, y) in enumerate(list):
if y == zahl:
found_index = index
if found_index is None:
raise ValueError()
return found_index
Und ich verstehe wie __deets__ nicht, was Du eigentlich willst. Du bekommst doch einen Index.
Danke für deine Antwort. anstatt xs, sollte eigentlich 'liste' hinkommen, habe ich aus Versehen falsch geschrieben. Den Code hatte ich jedoch richtig, also ohne Fehler geschrieben, nur hier beim Abtippen Fehler gemacht. Das Problem, was ich hatte war, dass ich nicht den Index des gesamten Tupels in der Liste ausgegeben bekam, sondern lediglich den Positionsindex des Elements, welches hier das 'y' wäre.Sirius3 hat geschrieben: ↑Donnerstag 29. Juli 2021, 19:35 Was ist denn „thalten” für ein Verb? Zusammengesetzte Funktionsnamen trennt man per _.
`xs` ist nicht definiert.
Wenn die Zahl nicht gefunden wird, ist `t` nicht definiert, und es gibt einen UnboundLocalError.
Eigentlich würde man einen ValueError erwarten.
Bei einer Funktion, die `zahl_enthalten` heißt, würde man aber einen Wahrheitswert als Rückgabewert erwarten.Code: Alles auswählen
def zahl_enthalten(liste, zahl): found_index = None for index, (x, y) in enumerate(list): if y == zahl: found_index = index if found_index is None: raise ValueError() return found_index
Und ich verstehe wie __deets__ nicht, was Du eigentlich willst. Du bekommst doch einen Index.
Vielen Dank für die hilfreiche Antwort.ThomasL hat geschrieben: ↑Donnerstag 29. Juli 2021, 18:45Code: Alles auswählen
ds = [(1,2),(3,1),(5,3),(5,1),(4,1)] def zahl_enthalten(liste, zahl): return [index for index, (x,y) in enumerate(liste) if x == zahl or y == zahl] print(zahl_enthalten(ds, 1)) >>> [0, 1, 3, 4]
ThomasL hat geschrieben: ↑Donnerstag 29. Juli 2021, 18:45Code: Alles auswählen
def zahl_enthalten(liste, zahl): return [index for index, (x,y) in enumerate(liste) if x == zahl or y == zahl]
Code: Alles auswählen
def zahl_enthalten(liste, zahl):
return [index for index, (x,y) in enumerate(liste) if zahl in(x, y)]
https://www.youtube.com/watch?v=NG2ci9CyiwI
- DeaD_EyE
- User
- Beiträge: 1017
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Was ist eigentlich, wenn eine Tuple mehr als einmal vorkommt?
Code: Alles auswählen
def get_idx(sequence, value, index=0):
try:
return sequence.index(value, index)
except ValueError:
return -1
def get_all_idx(sequence, value):
indexes = []
pos = 0
while True:
index = get_idx(sequence, value, index=pos)
if index == -1:
break
pos = index + 1
indexes.append(index)
return indexes
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
@LukeNukem:
@DeaD_EyE: der OP hat nicht genau spezifiziert, welcher Index gewollt ist. Ich hatte spontan anhand des Codes angenommen, dass der Index des letzten Vorkommens der Zahl gewollt ist. Wenn man die minimale Änderung am Code vornimmt, so dass er funktioniert, wäre es aber der erste Index des Tuples, das die selben x/y-Werte hat, wie das letzte Tuple bei dem der y-Wert einen bestimmten Wert hat.
Da wir die Anwendung nicht kennen, könnte das ja gefordert sein.
Code: Alles auswählen
def zahl_enthalten(liste, zahl):
return [index for index, zahlen in enumerate(liste) if zahl in zahlen]
Da wir die Anwendung nicht kennen, könnte das ja gefordert sein.
- DeaD_EyE
- User
- Beiträge: 1017
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
@Sirius3
Wenn er nur das letzte vorkommende Element von Rechts haben möchte, kann er den für die Position -1 verwenden.
Die List-Comprehension mit der Enumeration finde ich sogar besser, da dadurch der try...except-block entfällt.
Wenn er nur das letzte vorkommende Element von Rechts haben möchte, kann er den für die Position -1 verwenden.
Code: Alles auswählen
ds = ("AB", "A", "A", "AB")
pos_1 = ds.index("AB")
pos_2 = ds.index("AB", -1)
print(pos_1, pos_2)
Die List-Comprehension mit der Enumeration finde ich sogar besser, da dadurch der try...except-block entfällt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server