Moin Leute,
ich bin neu hier und habe mich schon etwas länger in Python3 eingearbeitet. Die Grundfunktionen bekomme ich super hin, allerdings hängt es gerade an einer Aufgabe:
Ich habe zwei Listen:
L1 = [1, 2, 3, 4, 5]
L2 = [6, 7, 8, 9]
Nun möchte ich sämtliche werte der ersten Liste(L1) mit sämtlichen Werten der zweiten Liste(L2) addieren/multiplizieren. Das Ergebnis sollte so dargestellt werden:
1 + 6 = 7
1 + 7 = 8
1 + 8 = 9
1 + 9 = 10
2 + 6 = 8
2 + 7 = 9
...usw
Habt ihr eine gute Idee für eine verständliche (und schnelle) Umsetzung? Ich bin für jede Hilfe sehr dankbar! =)
Addition aller Werte von zwei Listen
@mrlow: Du musst etwas für jedes Element der ersten Liste machen. Nämlich einen Block von Zeilen ausgeben bei dem der erste Summand das jeweilige Element ist. Jeder Block besteht aus einer Zeile für jedes Element aus der zweiten Liste. Für so etwas gibt es Schleifen.
Danke, das habe ich soweit verstanden.
Das Ergebnis sieht so aus:
Nun möchte ich diese Berechnung mit den jeweiligen Intervallen ausführen. Das Ergebnis soll so aussehen:
1 bis 2 + 6 bis 7
1 bis 2 + 7 bis 8
1 bis 2 + 8 bis 9
2 bis 3 + 6 bis 7
2 bis 3 + 7 bis 8
Mein Problem dabei ist, dass ich nicht weiß, wie der Index i ab dem zweiten Element ausgegeben wird (also in dem Fall 2). Hast du einen Tipp für mich?
Das Ergebnis sieht so aus:
Code: Alles auswählen
for i in L1:
for j in L2:
print(i,"+", j,"=",i+j)
print(" ")
1 bis 2 + 6 bis 7
1 bis 2 + 7 bis 8
1 bis 2 + 8 bis 9
2 bis 3 + 6 bis 7
2 bis 3 + 7 bis 8
Mein Problem dabei ist, dass ich nicht weiß, wie der Index i ab dem zweiten Element ausgegeben wird (also in dem Fall 2). Hast du einen Tipp für mich?
@mrlow: Bei den ”Rezepten” in der Dokumentation zum `itertools`-Modul ist eine Funktion `pairwise()` die Du dafür brauchst.
Vielen Dank für den Tipp!
Es funktioniert, wie ich das möchte.
Der Code sieht so aus:
Es funktioniert, wie ich das möchte.
Der Code sieht so aus:
Code: Alles auswählen
def pairwise(iterable):
iterable = iter(iterable)
a, b = next(iterable), next(iterable)
while 1:
yield a, b
try:
a, b = b, next(iterable)
except TypeError:
yield b
break
k = list(pairwise(L1))
l = list(pairwise(L2))
for x in k:
for y in l:
print('{0:5d} {1:5d} {2:5d} {3:5d}'.format(x[0], x[1], y[0], y[1]))
print("")
Zuletzt geändert von Anonymous am Dienstag 13. September 2016, 11:06, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
@mrlow: `pairwise()` ist in der Dokumentation wesentlich einfacher definiert.
Aus dem Iterator eine Liste zu machen widerspricht irgendwie der Idee un den Vorteilen die Iteratoren hier bieten. Nämlich das eben keine Liste erstellt wird, mit Werten, die man gar nicht auf einmal benötigt.
Aus dem Iterator eine Liste zu machen widerspricht irgendwie der Idee un den Vorteilen die Iteratoren hier bieten. Nämlich das eben keine Liste erstellt wird, mit Werten, die man gar nicht auf einmal benötigt.
Code: Alles auswählen
from itertools import izip, tee
def pairwise(iterable):
a, b = tee(iterable)
next(b, None)
return izip(a, b)
def main():
values_a = [1, 2, 3, 4, 5]
values_b = [6, 7, 8, 9]
for a_1, a_2 in pairwise(values_a):
for b_1, b_2 in pairwise(values_b):
print('{0:5d} {1:5d} {2:5d} {3:5d}'.format(a_1, a_2, b_1, b_2))
print()
if __name__ == '__main__':
main()
...so habe ich wieder was gelernt 
Lösung funktioniert wie vorher, aber ich spare mir Bearbeitungsschritte und der Code wird lesbarer. Das ist doch etwas
Folgende Info zur tee()

Lösung funktioniert wie vorher, aber ich spare mir Bearbeitungsschritte und der Code wird lesbarer. Das ist doch etwas

Folgende Info zur tee()
Da ich vorhabe, das Programm in Zukunft um weitere Listen (und Schleifen) zu ergänzen, könnte die Benutzung von tee() ggf. zum 'Problem' werden. Hast du vielleicht schon Erfahrungen damit gesammelt?Once tee() has made a split, the original iterable should not be used anywhere else; otherwise, the iterable could get advanced without the tee objects being informed.
This itertool may require significant auxiliary storage (depending on how much temporary data needs to be stored). In general, if one iterator uses most or all of the data before another iterator starts, it is faster to use list() instead of tee().
@mrlow: So ziemlich alles kann zu Problemen führen wenn man es ungünstig oder falsch verwendet. Hinweise stehen da ja in der Dokumentation. Im Vorliegenden Fall wird innerhalb von `pairwise()` der ursprüngliche Iterator nicht mehr verwendet und ausserhalb auch nicht. Und die beiden neuen Iteratoren haben immer nur ein Element ”Abstand”.