2016-11-14 165 views
-1

我應該計算兩個不同列表中元素之間的差異。這是我的代碼:在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 

我需要這樣的輸出:

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

我收到以下錯誤:

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

我不希望使用任何類像numpypandas

+0

我不確定5和8.5之間的差異應該如何1.5 ... – Mathias711

+0

錯誤很明顯,所以你有沒有想過如何解決這個問題? – EdChum

+0

這就是爲什麼我試圖問! – Braian

回答

3

您需要將數字轉換爲float s,如果元素不能轉換爲數字,則在它們之間插入一個'-'

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'] 

由於蟒蛇是強烈鍵入它不會隱對字符串的數字解釋執行算術如果遇到字符串之間的算術運算符(不要與靜態動態混淆)。沒有顯而易見的行爲減號操作符關於字符串的方式有明顯的加號行爲(即連接)。你會期望它從第一個字符串中移除第二個字符串的實例嗎?如果是這樣,您可以使用更明確的str.replace方法。或者你是否希望它只在第一個字符串以第二個字符串結尾時從第一個字符串中刪除第二個字符串?預期的行爲不是100%明顯的,所以Python作者不包括__sub__方法支持字符串。

另外,operator模塊沒有在您的代碼中使用,所以無需導入它。