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]

2voto

gnikit Punkte 607

TLDR

Wenn Sie Wert auf Leistung legen, verwenden Sie

len(''.join(strings))

sonst mit map ausreichen, ohne die Lesbarkeit des Codes zu beeinträchtigen oder die Leistung zu mindern

sum(map(len, strings))

Leistungsmetriken

Obwohl ich dem allgemeinen Konsens zustimme, dass bei der Verwendung von Python Ihre erste Priorität sollte nicht das Schreiben von effizientem und skalierbarem Code sein, ich denke, es wäre für diesen Beitrag von Vorteil, einige Zeitangaben für die vorgeschlagenen Antworten zu haben.

Mit den Worten aus dem ersten Absatz von lorem ipsum (Liste der Zeichenfolgen der Kürze halber ausgeschlossen)

In [3]: timeit("""
    ...: length = 0
    ...: for s in strings:
    ...:     length += len(s)
    ...: """, globals=globals())
Out[3]: 5.197531974001322

In [4]: timeit("sum(len(s) for s in strings)", globals=globals())
Out[4]: 4.925184353021905

In [5]: timeit("sum(map(len, strings))", globals=globals())
Out[5]: 1.9876644779578783

In [6]: timeit("len(''.join(strings))", globals=globals())
Out[6]: 0.6793132669990882

Für große Listen von Zeichenketten ist @Auspex also eindeutig vorzuziehen.

1voto

sk8asd123 Punkte 1545

Hier ist eine weitere Möglichkeit, den Operator zu verwenden. Ich bin mir nicht sicher, ob dies leichter zu lesen ist als die akzeptierte Antwort.

import operator

length = reduce(operator.add, map(len, strings))

print length

-1voto

shadab.tughlaq Punkte 444

Nur um noch eins draufzusetzen ...

Hinzufügen von Zahlen aus einer als Zeichenkette gespeicherten Liste

nos = ['1','14','34']

length = sum(int(s) for s in nos)

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