Liste spalten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mickimick
User
Beiträge: 4
Registriert: Samstag 31. August 2013, 19:20

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!
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:

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()
mickimick
User
Beiträge: 4
Registriert: Samstag 31. August 2013, 19:20

Super! Vielen vielen Dank! :)
Benutzeravatar
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.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

cofi hat geschrieben:Kurz gesagt: Du musst dafuer sorgen, dass die Eingangsliste schon passend geordnet ist.
In diesem Spezialfall reicht dafür die sort-Methode ohne Parameter.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

/me hat geschrieben:In diesem Spezialfall reicht dafür die sort-Methode ohne Parameter.
Wobei »sort« im Allgemeinen die Reihenfolge verändert.

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()
Antworten