19 Stimmen

Python: Summe der Stringlängen

Gibt es einen idiomatischeren Weg, um String-Längen in Python als mit einer Schleife zu summieren?

length = 0
for string in strings:
    length += len(string)

Ich habe versucht sum() aber es funktioniert nur für ganze Zahlen:

>>> sum('abc', 'de')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]

49voto

liori Punkte 38648
length = sum(len(s) for s in strings)

18voto

Daenyth Punkte 33328

Meine erste Möglichkeit wäre sum(map(len, strings)) . Eine andere Möglichkeit ist die Verwendung eines Listenverstehens oder eines Generatorausdrucks, wie es in den anderen Antworten beschrieben wurde.

7voto

Raymond Hettinger Punkte 197261

Der kürzeste und schnellste Weg ist die Anwendung eines funktionaler Programmierstil con map() y Summe() :

>>> data = ['a', 'bc', 'def', 'ghij']
>>> sum(map(len, data))
10

In Python 2, verwenden Sie itertools.imap anstelle von Karte für eine bessere Speicherleistung:

>>> from itertools import imap
>>> data = ['a', 'bc', 'def', 'ghij']
>>> sum(imap(len, data))
10

5voto

Auspex Punkte 2148

Ich weiß, dass dies eine alte Frage ist, aber ich kann nicht umhin, festzustellen, dass die Python-Fehlermeldung sagt wie Sie dies tun können:

TypeError: sum() can't sum strings [use ''.join(seq) instead]

Also:

>>> strings = ['abc', 'de']
>>> print len(''.join(strings))
5

2voto

Tony Veijalainen Punkte 5249
print(sum(len(mystr) for mystr in strings))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X