2016-03-12 41 views
2

我有兩個數字列表,a,b我想要這樣減去; b - a在Python中減去兩個列表而不使用類

我希望這對初學者來說很容易理解,因此我不想導入類或庫。

這是我已經試過了,和它的作品:

a = [420, 660, 730, 735] 
b = [450, 675, 770, 930] 
i = 0 
j = len(a) 
difference = [] 

while i < j: 
    difference.append(b[i] - a[i]) 
    i += 1 
print (difference) 
>>[30, 15, 40, 195] **the correct result** 

但是,必須有這樣做的,但不導入類或者說,我很想念庫的簡單的方法。

回答

11

一種簡單的方式來顯示,這將是:

a = [420, 660, 730, 735] 
b = [450, 675, 770, 930] 


print([v2 - v1 for v1, v2 in zip(a, b)]) 

zip將創建各要素之間的元組在你的清單中。所以,如果你單獨運行壓縮你會有這樣的:

zip(a, b) 

[(420, 450), (660, 675), (730, 770), (735, 930)] 

然後,進一步分析什麼是我所提供的答案發生,你正在做的是遍歷在列表中的每個元素,然後指定v1v2是你元組中的每一項。然後v2 - v1幾乎在做你的數學運算。所有這些都被包裹在所謂的列表理解中。

如果你仍然相信你仍然不想使用zip,並且如果你的例子使用了兩個相等的列表,那麼我建議刪除while循環並使用for代替。和您的解決方案將是非常相似,你已經有了,但這樣的:

n = [] 
for i, v in enumerate(a): 
    n.append(b[i] - v) 
print(n) 

所以,你必須創建一個新的列表,將舉行新的數據。使用enumerate,以便通過每次迭代獲得您的索引和值,並將您的數學運算附加到新列表中。

+0

這是如何用Python做到這一點的完美例子!正是我在找什麼和一個很好的解釋:D謝謝 –

2

考慮,你的清單abb - a可以評價爲

difference = [each[0] - each[1] for each in zip(b, a)] 
1

考慮到評論:

假設兩個列表純粹是由整數:

# a and b are the lists 
difference = [] 
for i in range(min(len(b), len(a))): 
    difference.append(b[i] - a[i]) 

編輯:另一個列表內涵是更Python,但這更符合原代碼

+1

小的改進,以避免與不等長度列表的問題:'我在範圍內(最小(len(a),len(b))):'。 –

5

operator模塊爲這種情況提供了標準操作符的功能版本。

>>> import operator 
>>> a = [420, 660, 730, 735] 
>>> b = [450, 675, 770, 930] 
>>> difference = list(map(operator.sub, b, a)) 
>>> print(difference) 
[30, 15, 40, 195]