Listen kombinieren und verschachteln

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
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Hallo.

Ich versuche gerade umständlich über schleifen mir meine liste zusammen zu bauen.
Folgendes hab ich:

Code: Alles auswählen

listA = ["A", "B", "C", "D"]
listB = [1, 2, 3, 4]
und haben will ich:

Code: Alles auswählen

want = [["A", 1], ["B", 2], ["C", 3], ["D", 4]]
Geht das nicht einfacherer als sich das selbst zusammen zu stellen?

Danke für eure Tipps^^ :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du suchst ``zip`` ;-)

Wenn es sich aber tatsächlich um einen Index handelt sollte, könntest Du auch mit ``enumerate`` arbeiten. Wenn die Zahl "hinten" stehen soll, dann eher mit ``itertools.count`` und ``zip``.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Super! Zip macht genau das was ich will!

Habs zwar noch nie gehört, aber jetzt werd ichs mir merken.

Danke!
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Hyperion hat geschrieben:Wenn es sich aber tatsächlich um einen Index handelt sollte, könntest Du auch mit ``enumerate`` arbeiten. Wenn die Zahl "hinten" stehen soll, dann eher mit ``itertools.count`` und ``zip``.
Wozu braucht man denn einen Index à la „[[0, 'erstes element'], [1, 'zweites Element']]“? :)
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Ich möchte die liste mit

Code: Alles auswählen

sorted()
sortieren.

Es ist auch kein Index
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kannst Du da mal ein wenig beschreiben, was Du genau vor hast? Sortieren kann man ja auch nicht numerische Werte...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Eigtl. will ich genau das hier machen. (Es funktioniert auch bereits bei mir)

Code: Alles auswählen

student_tuples = [('john', 'A', 15), ('jane', 'B', 12),('dave', 'B', 10)]
sorted(student_tuples, key=lambda student: student[2])   # sort by age
Vielleicht kann mir ja noch jemand erklären wie das mit den Lamda-Expressions funzt.
Ich kann nämlich bei

Code: Alles auswählen

key=lambda student: student[2]
bei dem string eintragen was ich will und der sortiert trotzdem :? :? :?
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Code: Alles auswählen

>>> from operator import itemgetter
>>> students = [('john', 'A', 15), ('jane', 'B', 12),('dave', 'B', 10)]
>>> sorted(students)
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> students.sort(key=itemgetter(2))
>>> students
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> 
Benutz’ list.sort, nicht sorted. „sorted“ liefert die sortierte Liste zurück, und ändert sie nicht.
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Ok. Werd ich mir merken :)
Das mit dem Lamda raff ich aber trotzdem überhaupt nicht :(
Auch nicht, wenn ich es bei Wikipedia nachlese...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Was genau verstehst Du denn nicht?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sublist
User
Beiträge: 33
Registriert: Donnerstag 11. Dezember 2008, 16:04

Ich glaub mir fehlt es an grundlegendem Wissen, um das zu verstehen. So weit bin ich noch nicht...
Anonyme Funktionen sagen mir einfach nichts
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Anonyme Funktionen sind harmlos, versuche doch mal eine Funktion zu bauen, die dasselbe wie der Lambda-Ausdruck macht.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

cofi hat geschrieben:Anonyme Funktionen sind harmlos, [...]
... und werden häufig nur aus reiner Begeisterung für anonyme Funktionen eingesetzt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

In dem Fall ist jedoch ``itemgetter`` die richtige Lösung. Dazu habe ich sogar mal eine kurze Erklärung geschrieben, wie das so funktioniert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
woody55
User
Beiträge: 13
Registriert: Freitag 4. Mai 2012, 22:00
Wohnort: /welt/graz/home

Hallo!

Ich habe genau das gleiche Problem wie sublist und Hyperions Antwort ist auch das, was ich suche.
Aber das kommt bei mir heraus:

Code: Alles auswählen

>>> listA = ["A", "B", "C", "D"]
>>> listB = [1, 2, 3, 4]
>>> want=zip(listA,listB)
>>> want
<zip object at 0x101cc4ef0>
>>> 
Wie bekomme ich 'want' als Liste von Tupeln? :cry:
Ich finde auch keine Methode dazu außer want.__next__(), aber das gibt mir immer nur einen Tupel. Ich will aber die ganze Liste.

Sorry für die wahrscheinlich bescheuerte Frage, aber ich programmiere erst kurz in Python.
Bitte um eine verständliche Antwort.
Nach Diktat vereist.
Äh - nein, falsch.
Nach Diktat vergreist.
Mist!
Nach Dicktat ... es interessiert sowieso niemanden.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Code: Alles auswählen

>>> A = ["A", "B", "C", "D"]
>>> B = [1, 2, 3, 4]
>>> C = zip(A, B)
>>> C
[('A', 1), ('B', 2), ('C', 3), ('D', 4)]
>>> list(zip(A, B))
[('A', 1), ('B', 2), ('C', 3), ('D', 4)]
Du kannst mittels list() versuchen Objekte der Sorte als Liste darstellen zu lassen. Merkwürdig bleibt es dennoch, dass es bei dir andere Resultate hervorrufen soll. Welche Python-Version nutzt du?
Benutzeravatar
woody55
User
Beiträge: 13
Registriert: Freitag 4. Mai 2012, 22:00
Wohnort: /welt/graz/home

Danke für die schnelle Antwort!

Code: Alles auswählen

ActivePython 3.2.2.3 (ActiveState Software Inc.) based on
Python 3.2.2 (default, Sep  8 2011, 12:20:30) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "copyright", "credits" or "license()" for more information.
Liegt es an der Version?
Nach Diktat vereist.
Äh - nein, falsch.
Nach Diktat vergreist.
Mist!
Nach Dicktat ... es interessiert sowieso niemanden.
Benutzeravatar
woody55
User
Beiträge: 13
Registriert: Freitag 4. Mai 2012, 22:00
Wohnort: /welt/graz/home

Ok, es ist die Version:

Code: Alles auswählen

Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> listA = ["A", "B", "C", "D"]
>>> listB = [1, 2, 3, 4]
>>> want=zip(listA,listB)
>>> want
[('A', 1), ('B', 2), ('C', 3), ('D', 4)]
>>> 
Und was mach ich jetzt in Python 3.x.x.x?
Nach Diktat vereist.
Äh - nein, falsch.
Nach Diktat vergreist.
Mist!
Nach Dicktat ... es interessiert sowieso niemanden.
BlackJack

@woody55: Das Objekt mit der `__next__()`-Methode ist iterierbar und die `list()`-Funktion erstellt Listen aus den Elementen von iterierbaren Objekten.
Benutzeravatar
woody55
User
Beiträge: 13
Registriert: Freitag 4. Mai 2012, 22:00
Wohnort: /welt/graz/home

@webspider und @blackjack: vielen Dank für eure geniale und rasche Hilfe!
Ihr liegt beide richtig!!!

Code: Alles auswählen

list(want)
[('A', 1), ('B', 2), ('C', 3), ('D', 4)]
Damit funktionierts auch unter Python 3!

Vielen Dank für die Hilfe!!!
Nach Diktat vereist.
Äh - nein, falsch.
Nach Diktat vergreist.
Mist!
Nach Dicktat ... es interessiert sowieso niemanden.
Antworten