Addition aller Werte von zwei Listen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
mrlow
User
Beiträge: 4
Registriert: Montag 12. September 2016, 15:00

Addition aller Werte von zwei Listen

Beitragvon mrlow » Montag 12. September 2016, 15:20

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! =)
Benutzeravatar
BlackJack
Moderator
Beiträge: 31344
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Addition aller Werte von zwei Listen

Beitragvon BlackJack » Montag 12. September 2016, 15:38

@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.
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p
mrlow
User
Beiträge: 4
Registriert: Montag 12. September 2016, 15:00

Re: Addition aller Werte von zwei Listen

Beitragvon mrlow » Montag 12. September 2016, 16:23

Danke, das habe ich soweit verstanden.
Das Ergebnis sieht so aus:

Code: Alles auswählen

for i in L1:
    for j in L2:
        print(i,"+", j,"=",i+j)
    print(" ")


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?
Benutzeravatar
BlackJack
Moderator
Beiträge: 31344
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Addition aller Werte von zwei Listen

Beitragvon BlackJack » Montag 12. September 2016, 17:08

@mrlow: Bei den ”Rezepten” in der Dokumentation zum `itertools`-Modul ist eine Funktion `pairwise()` die Du dafür brauchst.
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p
mrlow
User
Beiträge: 4
Registriert: Montag 12. September 2016, 15:00

Re: Addition aller Werte von zwei Listen

Beitragvon mrlow » Dienstag 13. September 2016, 11:01

Vielen Dank für den Tipp!
Es funktioniert, wie ich das möchte.
Der Code sieht so aus:
  1. def pairwise(iterable):
  2.     iterable = iter(iterable)
  3.     a, b = next(iterable), next(iterable)
  4.     while 1:
  5.         yield a, b
  6.         try:
  7.             a, b = b, next(iterable)
  8.         except TypeError:
  9.             yield b
  10.             break
  11.            
  12. k = list(pairwise(L1))
  13. l = list(pairwise(L2))
  14.  
  15. for x in k:
  16.     for y in l:
  17.         print('{0:5d} {1:5d} {2:5d} {3:5d}'.format(x[0], x[1], y[0], y[1]))
  18.     print("")
Zuletzt geändert von BlackJack am Dienstag 13. September 2016, 11:06, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
BlackJack
Moderator
Beiträge: 31344
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Addition aller Werte von zwei Listen

Beitragvon BlackJack » Dienstag 13. September 2016, 11:17

@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.
  1. from itertools import izip, tee
  2.  
  3.  
  4. def pairwise(iterable):
  5.     a, b = tee(iterable)
  6.     next(b, None)
  7.     return izip(a, b)
  8.  
  9.  
  10. def main():
  11.     values_a = [1, 2, 3, 4, 5]
  12.     values_b = [6, 7, 8, 9]
  13.  
  14.     for a_1, a_2 in pairwise(values_a):
  15.         for b_1, b_2 in pairwise(values_b):
  16.             print('{0:5d} {1:5d} {2:5d} {3:5d}'.format(a_1, a_2, b_1, b_2))
  17.         print()
  18.  
  19.  
  20. if __name__ == '__main__':
  21.     main()
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p
mrlow
User
Beiträge: 4
Registriert: Montag 12. September 2016, 15:00

Re: Addition aller Werte von zwei Listen

Beitragvon mrlow » Donnerstag 15. September 2016, 13:06

...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()
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().


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?
Benutzeravatar
BlackJack
Moderator
Beiträge: 31344
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Addition aller Werte von zwei Listen

Beitragvon BlackJack » Donnerstag 15. September 2016, 14:06

@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”.
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p

Zurück zu „Wissenschaftliches Rechnen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder