Hallöchen,
ich möchte aus 2 Listen Paare bilden.
Das ganze kann man sich so vorstellen:
>>> PaareBilden(["k", "m", "p"], ["b", "o"])
[('k', 'b'), ('k', 'o'), ('m', 'b'), ('m', 'o'), ('p', 'b'), ('p', 'o')]
so soll es mal aussehen....die funktion bekommt also 2 listen und sol daraus alle möglichen paare bilden und als tupel in einer liste ausgeben....soweit die idee.
Kann mir da jemand helfen wie der Spaß funktioniert?
Liebe Grüßchen...
Paare aus 2 Listen bilden
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Hast du denn einen Ansatz? Sonst versuche mal zu beschreiben, wie du vorgehen willst.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Das du ein Generator-Objekt erstellt hast, du kannst auf die einzelnen Elemente der Liste mit einer for i in Generator: print(i) zugreifen. Willst du die Paare als Tupel erhalten oder als Liste???
Du kannst einmal das hier versuchen:
Du kannst einmal das hier versuchen:
Code: Alles auswählen
def PaareBilden(liste1,liste2):
''' Deine Funktion, die eine Liste
mit Elementen vom Typ tuple zurückgibt.
'''
ergebnisListe = []
for item1 in liste1:
for item2 in liste2:
paar = item1, item2
ergebnisListe.append(paar)
return ergebnisListe
liste1 = [1,2,3]
liste2 = [4,5,6]
for paar in PaareBilden(liste1,liste2):
print(paar)
selbst mit for i in generator: print(i) kommt diese meldung...
eigentlich sollen die gebildeten paar als eine liste von tupel ausgegeben werden.
hier mein ansatz (an link orientiert):
def PaareBilden(liste1,liste2):
pools = map(tuple, liste1) * liste2.get("repeat, 1)
ergebnis = [[]]
for pool in pools:
ergebnis = [x+[y] for x in ergebnis for y in pool]
for prod in ergebnis:
yield tuple(prod)
versuche ich es dann auszuführen, kommt das hier:
>>> PaareBilden(["a", "b", "c", "d"], ["bla", "blubb"])
<generator object PaareBilden at 0x0270C058>
>>> for i in generator:
print(i)
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
for i in generator:
NameError: name 'generator' is not defined
was mache ich falsch?
eigentlich sollen die gebildeten paar als eine liste von tupel ausgegeben werden.
hier mein ansatz (an link orientiert):
def PaareBilden(liste1,liste2):
pools = map(tuple, liste1) * liste2.get("repeat, 1)
ergebnis = [[]]
for pool in pools:
ergebnis = [x+[y] for x in ergebnis for y in pool]
for prod in ergebnis:
yield tuple(prod)
versuche ich es dann auszuführen, kommt das hier:
>>> PaareBilden(["a", "b", "c", "d"], ["bla", "blubb"])
<generator object PaareBilden at 0x0270C058>
>>> for i in generator:
print(i)
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
for i in generator:
NameError: name 'generator' is not defined
was mache ich falsch?
Setz deinen Quellcode bitte in python-tags, sonst kann das nicht schnell rauskopiert werden und ist nicht gut händelbar. Wir können deinen Quellcode dann nicht rauskopieren und testen, d. h. wir können deinen Fehler nicht reproduzieren und dir nicht sinnvoll antworten.
oh, tut mir leid....hier nochmal:
Code: Alles auswählen
>>> def PaareBilden(liste1,liste2):
pools = map(tuple, liste1) * liste2.get("repeat", 1)
ergebnis = [[]]
for pool in pools:
ergebnis = [x+[y] for x in ergebnis for y in pool]
for prod in ergebnis:
yield tuple(prod)
>>> PaareBilden(["a", "b", "c", "d"], ["bla", "blubb"])
<generator object PaareBilden at 0x02714FA8>
>>> for i in generator:
print (i)
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
for i in generator:
NameError: name 'generator' is not defined
@Chilla258: Die Ausnahme sagt Dir das der Name `generator` nicht definiert ist. Ist er ja auch nicht. Du musst das Ergebnis der Funktion schon an einen Namen binden oder direkt in der Schleife verwenden.
hmm, stimmt....
aber mir wird ja <generator object PaareBilden at 0x025DC198> das hier ausgegeben....python müsste demnach ja wissen was der generator ist.
wie kann ich den denn dann in meiner funktion definieren?
könnte mir jemand ein beispiel geben, bitte?
und wie könnte ich das in eine for schleife einbinden?
aber mir wird ja <generator object PaareBilden at 0x025DC198> das hier ausgegeben....python müsste demnach ja wissen was der generator ist.
wie kann ich den denn dann in meiner funktion definieren?
könnte mir jemand ein beispiel geben, bitte?
und wie könnte ich das in eine for schleife einbinden?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
BlackJack hat es Dir doch schon erklärt... Du musst Das Ergebnis Deines Funktionsaufrufes an einen Namen binden - oder direkt über das Ergebnis iterieren...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Chilla258: Python *wusste* mal das es den Generator gab, denn er wird ja in der Zeile nicht *an einen Namen gebunden*. Die Funktion gibt etwas zurück und das wird hier einfach nur in der Python-Shell ausgegeben. Wenn Du es nicht einem Namen zuweist oder den Aufruf direkt im Schleifenkopf durchführst, dann ist das Ergebnis abgesehen von der Ausgabe im Terminalfenster weg.
Und warum implementierst Du die `itertools.product()`-Funktion eigentlich ”selbst”? Die Funktion ist nur ein Beispiel was das gleiche Ergebnis wie `product()` liefert, aber ineffizienter ist. Das steht da auch.
Und warum implementierst Du die `itertools.product()`-Funktion eigentlich ”selbst”? Die Funktion ist nur ein Beispiel was das gleiche Ergebnis wie `product()` liefert, aber ineffizienter ist. Das steht da auch.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Beispiel:Chilla258 hat geschrieben: kann mir bitte jemand ein beispiel geben? ich bin schon völlig verzweifelt
Code: Alles auswählen
name = "Hyperion"
print(name)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Code: Alles auswählen
In [1]: import itertools
In [2]: itertools.product('hier', 'das', 'beispiel')
Out[2]: <itertools.product at 0x2e7a320>
In [3]: list(itertools.product('hier', 'das', 'beispiel'))
Out[3]:
[('h', 'd', 'b'),
('h', 'd', 'e'),
('h', 'd', 'i'),
('h', 'd', 's'),
('h', 'd', 'p'),
('h', 'd', 'i'),
('h', 'd', 'e'),
('h', 'd', 'l'),
('h', 'a', 'b'),
('h', 'a', 'e'),
('h', 'a', 'i'),
('h', 'a', 's'),
('h', 'a', 'p'),
('h', 'a', 'i'),
...
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ja, aber da Du das Generator-Objekt *nicht* an einen Namen bindest, kannst Du es eben auch nicht ausgeben... genau das sagte die FehlermeldungChilla258 hat geschrieben:wie man sowas ausgibt, krieg ich auch grade noch so hin so doof bin ich dann auch wieder nicht....
aber diese funktion gibt mir immer nur diesen generator aus....das macht mich grad echt wahnsinnig -.-
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Ich hab da mal eine Frage zu:
Wenn ich das richtig sehe, dann ist das mit liste2.get(...) ein Fehler, weil hier tatsächlich eine Liste übergeben wird und keine Argumente, eigentlich sollten bei liste2 etwas wie "repeat=4" übergeben werden, [s]wobei der get-Befehl dann genau einmal nach dem repeat sucht? Verstehe ich die Zeile richtig?[/s] das ist tatsächlich ein dictionary und mit dem get-Befehl wird darauf zugegriffen, wobei dann aber der Wert 1 zugewiesen wird, falls kein Wert spezifiziert ist (Standardwert).
Eine weitere Frage betrifft das ergebnis = [[]], wobei ich mich frage, welchen Sinn es macht die verschachtelte Liste zuzuweisen, denn der Typ "Liste" bleibt unverändert und bei jedem Mal wird in der for-Schleife das Ergebnis eh geändert, d. h. das [[]] - Ok, ich sehe gerade, dass eine weitere for-Schleife aufs Ergebnis zugreift Der Quellcode ist mir (noch) zu hoch. Ich teste mich gerade über die Konsole ran, was der Quelltext eigentlich macht...
Code: Alles auswählen
def PaareBilden(liste1,liste2):
pools = map(tuple, liste1) * liste2.get("repeat", 1)
ergebnis = [[]]
for pool in pools:
ergebnis = [x+[y] for x in ergebnis for y in pool]
for prod in ergebnis:
yield tuple(prod)
Eine weitere Frage betrifft das ergebnis = [[]], wobei ich mich frage, welchen Sinn es macht die verschachtelte Liste zuzuweisen, denn der Typ "Liste" bleibt unverändert und bei jedem Mal wird in der for-Schleife das Ergebnis eh geändert, d. h. das [[]] - Ok, ich sehe gerade, dass eine weitere for-Schleife aufs Ergebnis zugreift Der Quellcode ist mir (noch) zu hoch. Ich teste mich gerade über die Konsole ran, was der Quelltext eigentlich macht...