Seite 1 von 1

Liste spalten

Verfasst: Sonntag 1. September 2013, 07:58
von mickimick
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!

Re: Liste spalten

Verfasst: Sonntag 1. September 2013, 09:09
von 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()

Re: Liste spalten

Verfasst: Sonntag 1. September 2013, 11:10
von mickimick
Super! Vielen vielen Dank! :)

Re: Liste spalten

Verfasst: Sonntag 1. September 2013, 14:24
von cofi
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.

Re: Liste spalten

Verfasst: Sonntag 1. September 2013, 14:28
von /me
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.

Re: Liste spalten

Verfasst: Sonntag 1. September 2013, 15:25
von Sirius3
/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()