Hallo zusammen,
leider stelle ich mich gerade wieder ein bisschen an ...
Ich habe eine Liste, die folgendermaßen aussieht: L=[(a,b),(a,c),(a,d),(e,f),(e,g)]
Gibt es einen Befehl, der mir die Liste aufteilt und wie folgt ausgibt:
La=[(a,b),(a,c),(a,d)]
Le=[(e,f),(e,g)]
oder
L=([a,b],[a,c],[a,d],[e,f],[e,g]) ??
Danke schon mal für eure Hilfe!
Liste spalten
-
BlackJack
@mickimick: Befehle gibt es in Python sehr wenige. Aber dafür viele Funktionen (und Datentypen und Methoden) in der Standardbibliothek. `itertools.groupby()` sollte helfen könnnen. Und `operator.itemgetter()`.
Edit:
Edit:
Code: Alles auswählen
from itertools import groupby
from operator import itemgetter
get_first = itemgetter(0)
def main():
data = [('a', 'b'), ('a', 'c'), ('a', 'd'), ('e', 'f'), ('e', 'g')]
print [list(g) for _, g in groupby(data, get_first)]
if __name__ == '__main__':
main()- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Bei ``groupby`` solltest du auf jeden Fall noch einen Blick in die Dokumentation werfen: http://docs.python.org/2/library/iterto ... ls.groupby
Kurz gesagt: Du musst dafuer sorgen, dass die Eingangsliste schon passend geordnet ist.
Kurz gesagt: Du musst dafuer sorgen, dass die Eingangsliste schon passend geordnet ist.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Wobei »sort« im Allgemeinen die Reihenfolge verändert./me hat geschrieben:In diesem Spezialfall reicht dafür die sort-Methode ohne Parameter.
Code: Alles auswählen
from collections import defaultdict
def main():
data = [('a', 'b'), ('a', 'c'), ('a', 'd'), ('e', 'f'), ('e', 'g')]
grouped = defaultdict(list)
for value in data:
grouped[value[0]].append(value)
print grouped['a']
print grouped['e']
if __name__ == '__main__':
main()