2012-04-11 20 views
0
sum(int(i.replace(',',''))if re.search('\d',i)!=None for i in list) 

Ich möchte alle Elemente in einer Liste zusammenfassen. Die Probleme sind, dass Elemente Strings sind, einige von ihnen haben Zahlen und ich möchte sie in ganze Zahlen konvertieren und dann addieren. Deshalb muss ich prüfen, ob Zahlen in der Zeichenfolge sind. Wie kann ich der Liste in der Summenfunktion eine Bedingung hinzufügen? Außerdem möchte ich die Summenfunktion verwenden, die ich nicht einfach durch die Liste durchlaufen und dann zu einer Variablen hinzufügen möchte.Summe Elemente in Liste unter Bedingung (Python)

+3

Können Sie Beispiel Ein-/Ausgabe geben? –

+0

List Verständnis mit einer Funktion zum Filtern und Ändern Ihrer Anforderungen scheint der Weg zu gehen. – TimothyAWiseman

Antwort

3

Wie kann ich eine Bedingung zur Liste in der Summenfunktion hinzuzufügen.

Sie fast da sind, mit der Ausnahme, dass die if am Ende kommt:

sum(int(i.replace(',','')) for i in list if re.search(r'\d', i)) 

Nach diesen Worten, die allgemeine Ansatz ist nicht kugelsicher. Es würde an Eingängen ersticken, die Ziffern mit anderen Zeichen mischen (z. B. 'a1').

Auch die Verwendung des Kommas als Tausendertrennzeichen ist nicht universell. Some locales verwenden Sie es, um den Radixpunkt zu markieren. In diesen Ländereinstellungen würde der Code falsche Werte für Zahlen mit Kommas in ihnen erzeugen.

1

vielleicht so etwas wie dies

def safeIntToSum(x): 
    try: return int(x.replace(",","")) 
    except: return 0 

print sum([safeIntToSum(x) for x in list]) 
+0

Ich denke, es ist etwas schneller, wenn Sie es nicht zuerst in eine Liste verwandeln. z.B. 'sum (safeIntoSum (x) für x in der Liste)' –

Verwandte Themen