Guten Abend zusammen,
ich bin neu hier im Forum. Vor kurzem habe ich angefangen mich mit Python auseinanderzusetzen.
Jetzt habe ich eine Aufgabe gegeben, die zu den Basics gehört, aber irgendwie bekomme ich es nicht hin.
Beispiel:
Ein Tupel ist gegliedert in (Nummer, Name, Sportart, Geschlecht). Ich möchte eine Liste aus folgenden Tupeln erstellen, bei denen das 2. Element sprich die Sportart ausgegeben wird. Dabei darf die Sportart nicht doppelt vorkommen. Vielleicht würde ich die Aufgabe hinbekommen, wenn ich wüsste, wie ich auf jedes 2. Element eines Tupels zugreifen kann.
athleten = [(87689776, 'Aauri Lorena Bokesa', 'athletics', 'female'),
(997877719, 'Ababel Yeshaneh', 'riding', 'female'),
(343694681, 'Abadi Hadis', 'athletics', 'male'),
(591319906, 'Abbas Abubakar Abbas', 'cycling', 'male'),
(258556239, 'Abbas Qali', 'aquatics', 'male') ]
Ich hoffe das mein Problem verständlich geschildert wurde und würde mich über eine Hilfe wirklich freuen, Danke !
Liste von Tupeln filtern
Indexzugriff sagt Dir was?
Jetzt brauchst Du noch eine for-Schleife, um das für jede Athleten in der Liste zu machen.
Besser wäre es, gleich von Anfang an namedtuples zu benutzen, dann braucht man sich erst gar nicht mit der kryptischen 2 herumärgern:
sondern man kann per Attribut zugreifen: `athlet.sportart`.
Code: Alles auswählen
athlet = (87689776, 'Aauri Lorena Bokesa', 'athletics', 'female')
print(athlet[2])
Besser wäre es, gleich von Anfang an namedtuples zu benutzen, dann braucht man sich erst gar nicht mit der kryptischen 2 herumärgern:
Code: Alles auswählen
from collections import namedtuple
Athlet = namedtuple("Athlet", "nummer,name,sportart,geschlecht")
athleten = [
Athlet(87689776, 'Aauri Lorena Bokesa', 'athletics', 'female'),
Athlet(997877719, 'Ababel Yeshaneh', 'riding', 'female'),
Athlet(343694681, 'Abadi Hadis', 'athletics', 'male'),
Athlet(591319906, 'Abbas Abubakar Abbas', 'cycling', 'male'),
Athlet(258556239, 'Abbas Qali', 'aquatics', 'male')
]
Hey,
jetzt überschneidet es sich zwar, aber ich wollte meinen Code trotzdem noch posten.
Wahrscheinlich ist Sirius Lösung sauberer, da bin ich relativ sicher :O
Viele GRüße
YAPD
jetzt überschneidet es sich zwar, aber ich wollte meinen Code trotzdem noch posten.
Wahrscheinlich ist Sirius Lösung sauberer, da bin ich relativ sicher :O
Code: Alles auswählen
athleten = [
(87689776, 'Aauri Lorena Bokesa', 'athletics', 'female'),
(997877719, 'Ababel Yeshaneh', 'riding', 'female'),
(343694681, 'Abadi Hadis', 'athletics', 'male'),
(591319906, 'Abbas Abubakar Abbas', 'cycling', 'male'),
(258556239, 'Abbas Qali', 'aquatics', 'male')
]
Sports = [ ]
for athlet in athleten :
if athlet[2] not in Sports:
print(athlet[0] , ":" , athlet[1] , ":" , athlet[2])
Sports.append(athlet[ 2 ])
else:
print( "The sport '" + athlet[2] + "' is already represented." )
YAPD
-----
Yet Another Python Developer
Yet Another Python Developer
-
- User
- Beiträge: 2
- Registriert: Montag 2. August 2021, 18:36
@Sirius 3 und @YAPD Lieben Dank für eure Hilfe. Sirius3 deine Lösung war für mich etwas schwer nachvollziehbar. Es liegt aber sicherlich an meinen "Skills" .Mit der Lösung von YAPD habe ich ein Ergebnis rausbekommen. Danke nochmal für eure sehr schnelle Unterstützung.
Ich liefere ja auch keine Lösungen zu Hausaufgaben, denn es ist wenig lehrreich, wenn Du einfach nur abtippen brauchst.
@YAPD: Variablennamen schreibt man komplett klein. Vor , und : wird kein Leerzeichen gesetzt.
Statt Strings mit + zusammenzustückeln benutzt man Format-Strings.
Die vielen Wiederholungen der magischen 2 macht den Code nicht lesbar:
Der Einzeiler benutzt ein Set:
@YAPD: Variablennamen schreibt man komplett klein. Vor , und : wird kein Leerzeichen gesetzt.
Statt Strings mit + zusammenzustückeln benutzt man Format-Strings.
Code: Alles auswählen
sports = [ ]
for athlet in athleten:
if athlet[2] not in sports:
print(athlet[0], athlet[1], athlet[2], sep=" : ")
sports.append(athlet[2])
else:
print(f"The sport '{athlet[2]}' is already represented." )
Code: Alles auswählen
for athlet in athleten:
sport = athlet[2]
if sport not in sports:
sports.append(sport)
else:
print(f"The sport '{sport}' is already represented." )
Code: Alles auswählen
sports = list(set(athlet[2] for athlet in athleten))
Und wenn man die Sportarten in der ursprünglichen Reihenfolge haben will, gibt es `more_itertools.unique_everseen`.
Ich muss nochmal sagen, dass du auf jeden Fall lieber mit Sirius Lösung arbeiten
solltest, da diese einfach sauberer ist und dich ein bisschen mit dem Hintergrund
beschäftigen. Auch wenn mein Code funktioniert, obwohl ich es praktisch "falsch"
oder unsauber gemacht habe, ist sein Code sehr verständlich, verständlicher als
meiner auf jeden Fall
Du erhältst bei Fragen bestimmt hier im Forum Unterstützung, auch von mir,
soweit ich kann
VG
YAPD
solltest, da diese einfach sauberer ist und dich ein bisschen mit dem Hintergrund
beschäftigen. Auch wenn mein Code funktioniert, obwohl ich es praktisch "falsch"
oder unsauber gemacht habe, ist sein Code sehr verständlich, verständlicher als
meiner auf jeden Fall
Du erhältst bei Fragen bestimmt hier im Forum Unterstützung, auch von mir,
soweit ich kann
VG
YAPD
-----
Yet Another Python Developer
Yet Another Python Developer