2016-11-14 8 views
-1

Ich sollte den Unterschied zwischen Elementen zwei verschiedene Liste berechnen. Dies ist mein Code:Subtrahieren Sie zwei Strings in Python

import operator 
a = ['5', '35.1', 'FFD'] 
b = ['8.5', '11.3', 'AMM']  
difference = [each[0] - each[1] for each in zip(b, a)] 
print difference 

Ich brauche diese Ausgabe:

b-a = ['3.5','-23.8','AMM-FFD']

ich die folgende Fehlermeldung:

unsupported operand type(s) for -: 'str' and 'str'

Ich will keine Klasse verwenden, wie numpy oder pandas

+0

Ich bin mir nicht sicher, wie der Unterschied zwischen 5 und 8,5 sollte 1,5 ... – Mathias711

+0

Fehler ist klar, also haben Sie darüber nachgedacht, wie Sie das beheben? – EdChum

+0

Deshalb versuche ich zu fragen !! – Braian

Antwort

3

Sie müssen Konvertieren Sie Zahlen in float s, und wenn die Elemente nicht in Zahlen konvertiert werden können, fügen Sie eine '-' zwischen ihnen.

diffs = [] 
for i, j in zip(a, b): 
    try: 
     diffs.append(str(float(j) - float(i))) 
    except ValueError: 
     diffs.append('-'.join([j, i])) 

>>> print(diffs) 
['3.5', '-23.8', 'AMM-FFD'] 

Da Python ist stark getippt es nicht implizit durchführt Arithmetik auf der numerischen Auslegung von Strings (nicht mit statischen vs. dynamischen verwechselt werden), wenn es einen arithmetischen Operator zwischen Saiten trifft. Es gibt kein offensichtliches Verhalten des Minus-Operators in Bezug auf Strings, wie es ein offensichtliches Verhalten von plus gibt (d. H. Verketten). Würden Sie erwarten, dass Instanzen der zweiten Zeichenfolge aus der ersten Zeichenfolge entfernt werden? Wenn ja, gibt es bereits eine explizitere Methode str.replace, die Sie verwenden können. Oder würden Sie erwarten, dass die zweite Zeichenfolge nur dann von der ersten entfernt wird, wenn die erste Zeichenfolge mit der zweiten Zeichenfolge endet? Das erwartete Verhalten ist nicht 100% offensichtlich, so dass die Python-Autoren keine __sub__ Methodenunterstützung für Strings enthalten.

Auch das Modul operator wird nicht in Ihrem Code verwendet, Sie müssen es also nicht importieren.