dict list summierung

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
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

Hi
Ich versuche alle Elemente von jedem Array aufzusummieren, aber leider funktioniert der folgende code nicht:

Code: Alles auswählen

>>> a = {1: [1, 2, 3], 2: [3, 2]} 
{1: [1, 2, 3], 2: [3, 2]}
>>> [sum(i) for i in a.values()] 
[6, 5]
Wie ist es möglich als Ergebnis 5 (3 + 2) zubekommen, anstatt [6, 5]?

Vielen Dank im voraus.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Man nennt diese Dinger (die Keys in Deinem Dictionary) in Python Listen, nicht Arrays ;-)

Zu Deiner Frage:

Code: Alles auswählen

In [4]: sum(a[2])
Out[4]: 5
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
björn
User
Beiträge: 7
Registriert: Montag 12. September 2011, 08:54

Er berechnet doch richtig die Summen der einzelnen Arrays!
1: 1+2+3 = 6
2: 2+3 = 5
Und daraus generiert er dir Das Array [6,5]

Ich verstehe glaube ich dein Problem nicht so richtig!

Gruß
Björn
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

Code: Alles auswählen

>>> a = {1: [1, 2, 3], 2: [3, 2], 3: [1]} 
Dict hat 3 Keys und 3 Listen. Ich versuche von jeder Liste die Anzahl zu bestimmen und diese dann zu summieren wie folgt:

Code: Alles auswählen

6 = {1: len([1, 2, 3]), 2: len([3, 2]), 3: len([1])} = 3 + 2 +1
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Wie würdest du denn vorgehen? Schreibe doch erst einmal eine normale for-Schleife. Und überlege was du tun musst. Wenn das klappt, dann versuchs mit einer LC.

Tip: benutze `len` und `sum`.
[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]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mit hat geschrieben: Dict hat 3 Keys und 3 Listen. Ich versuche von jeder Liste die Anzahl zu bestimmen und diese dann zu summieren wie folgt:
Also willst Du nicht über die Elemente summieren sondern über die Anzahl! Das hättest Du auch schon im ersten Posting schreiben können; erschwerend für eine direkt richtige Deutung für uns ist noch, dass Du ein unglückliches Beispiel gewählt hattest (in dem nämlich 2 und 3 als Elemente vorkommen).

Ergänzend zu jbs:
Ich würde mir mal die Methode `values()` eines Dictionaries angucken (später ggf. auch `itervalues()`). Wenn Du das nicht mit einer Schleife machen willst, kannst Du Dir dann noch `map` (bzw. `imap` aus dem `itertools`-Modul) angucken. Aber zunächst sollte man das wohl erst einmal in einer Schleife lösen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mit
User
Beiträge: 285
Registriert: Dienstag 16. September 2008, 10:00

Danke fuer die tipps.

Loesung: sum([len(i) for i in a.values()])
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du könntest auch einen Generatorausdruck verwenden; das sollte speicherschonender sein:

Code: Alles auswählen

In [65]: sum((len(i) for i in a.values()))
Out[65]: 6
Ich hatte mir diese funktionale Lösung ausgedacht:

Code: Alles auswählen

In [68]: from itertools import imap

In [69]: sum(imap(len, a.itervalues()))
Out[69]: 6
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lunar

@Hyperion: Die inneren Klammern im Generatorausdruck sind überflüssig.
Antworten