2 Listen "Reisverschluß-artig" verknüpfen

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
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Mittwoch 25. April 2007, 18:12

Hallo,
ich bin ganz neu in Python und auf der Suche nach einer Funktion, die ähnlich wie die zip-Funktion in Haskell ist.
Ich übergebe x Listen und bekomme eine Liste aus x-Tupeln herraus.
Besipiel:

Code: Alles auswählen

L1=["a","b","c"]
L2=[1,2,3]
Ergebniss= [("a",1),("b",2),("c",3)]
und das ergebniss würde ich dann gerne sortieren, und wenn es geht nach _einem der tupel-werte, also zum beispiel nach den zahlen.

gibt es da in Python schon fertige funktionen, oder muss ich mir das selber schreiben?

Danke,
robert
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 25. April 2007, 18:26

.robert hat geschrieben:ähnlich wie die zip-Funktion
Hallo robert!

Willkommen im Python-Forum!

Du suchst also ``zip()``. ;-)

Code: Alles auswählen

>>> l1 = ["b", "a", "c"]
>>> l2 = [2, 3, 1]
>>> ergebnis = zip(l1, l2)
>>> ergebnis
[('b', 2), ('a', 3), ('c', 1)]
>>> sorted(ergebnis)
[('a', 3), ('b', 2), ('c', 1)]
>>> import operator
>>> sorted(ergebnis, key = operator.itemgetter(1))
[('c', 1), ('b', 2), ('a', 3)]
>>>

mfg
Gerold
:-)

PS: Diese Seite könnte bei so einer Suche nach einer Funktion behilflich sein: http://docs.python.org/lib/genindex.html
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Mittwoch 25. April 2007, 18:37

wow, schnell und freundlich die antwort, danke!

aber das die funktion jetzt auch noch genau so heißt ist ja schon ein bischen peinlich :oops:
Aber hat schonmal einer nach "zip" gegoogelt :wink:

grüße...
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 25. April 2007, 19:22

.robert hat geschrieben:Aber hat schonmal einer nach "zip" gegoogelt :wink:
Also oft steht in der Doku auch schon genug ;-)
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mittwoch 25. April 2007, 20:11

Code: Alles auswählen

>>> import operator
>>> sorted(ergebnis, key = operator.itemgetter(1))
Also wenn ich mal wieder mehr Zeit hab muss ich mir das mal im Debugger angucken. Hab das noch nicht 100% verstanden was da mit dem itemgetter-Objekt angestellt wird. Aber interessant zu wissen ;)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 25. April 2007, 20:46

Zap hat geschrieben:

Code: Alles auswählen

>>> import operator
>>> sorted(ergebnis, key = operator.itemgetter(1))
Hi Zap!

Code: Alles auswählen

>>> sorted(ergebnis, key = lambda x: x[1])
[('c', 1), ('b', 2), ('a', 3)]
>>> def keyfunc(x):
...     return x[1]
...     
>>> sorted(ergebnis, key = keyfunc)
[('c', 1), ('b', 2), ('a', 3)]
>>>
Als ``key`` kann eine Funktion übergeben werden. Diese Funktion wird beim Iterieren über das zu sortierende Objekt für jedes enthaltene Item einmal aufgerufen.
Ich gehe davon aus, dass ``operator.itemgetter`` schneller als ``lambda`` oder eine selbst geschriebene Funktion ist, da ``operator`` ein eingebautes, wahrscheinlich in C geschriebenes, Modul ist. -->

Code: Alles auswählen

>>> operator
<module 'operator' (built-in)>

Code: Alles auswählen

>>> help(operator.itemgetter)
Help on class itemgetter in module operator:

class itemgetter(__builtin__.object)
 |  itemgetter(item) --> itemgetter object
 |  
 |  Return a callable object that fetches the given item from its operand.
 |  After, f=itemgetter(2), the call f(b) returns b[2].
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mittwoch 25. April 2007, 22:25

Super danke, das hab ich jetzt gerafft. :o
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 26. April 2007, 08:05

gerold hat geschrieben:Du suchst also ``zip()``. ;-)
Ich habs mal ins Wiki eingetragen: [wiki]Tutorial/Listen#ZipZweiListenVerknpfen[/wiki]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Donnerstag 26. April 2007, 08:50

Ich wollte nochmal `itertools.izip()` in die Runde werfen. Damit bekommt man ein wenig "lazy evaluation" wie bei Haskell's `zip`.
Antworten