現在我有vector3值表示爲列表。有沒有辦法減去2這些像vector3值,如在Python中減去2個列表
[2,2,2] - [1,1,1] = [1,1,1]
我應該使用元組?
如果它們中沒有一個在這些類型上定義這些操作數,我可以定義它嗎?
如果不是,我應該創建一個新的vector3類嗎?
現在我有vector3值表示爲列表。有沒有辦法減去2這些像vector3值,如在Python中減去2個列表
[2,2,2] - [1,1,1] = [1,1,1]
我應該使用元組?
如果它們中沒有一個在這些類型上定義這些操作數,我可以定義它嗎?
如果不是,我應該創建一個新的vector3類嗎?
如果這是你最終經常做的事情,並用不同的操作,您可能需要創建一個類來處理像這樣的情況下,或更好地使用一些庫,如Numpy。
否則,尋找與zip內建函數使用list comprehensions:
[a_i - b_i for a_i, b_i in zip(a, b)]
如果你有兩個列表稱爲「A」和「B」,你可以這樣做:[m - n for m,n in zip(a,b)]
如果您計劃執行的不僅僅是一個簡單的內襯,最好是實施您自己的班級,並在適用於您的案例時重寫相應的操作員。
class Vector:
def __init__(self, data):
self.data = data
def __repr__(self):
return repr(self.data)
def __add__(self, other):
data = []
for j in range(len(self.data)):
data.append(self.data[j] + other.data[j])
return Vector(data)
x = Vector([1, 2, 3])
print x + x
如果你的列表是a和b,你可以這樣做:
map(int.__sub__, a, b)
但你可能不應該。沒有人會知道這意味着什麼。
這是很酷的答案。 – garej 2017-04-09 05:31:40
下面是列表推導的替代方案。 Map迭代遍歷列表(後面的參數),同時進行,並將它們的元素作爲參數傳遞給函數(第一個arg)。它返回結果列表。
map(operator.sub, a, b)
此代碼,因爲有較少的語法(這對我來說更美觀),顯然它是長度爲5的名單(見bobince的評論)提高了40%。不管怎樣,這兩種解決方案都可行
稍微不同的Vector類。
class Vector(object):
def __init__(self, *data):
self.data = data
def __repr__(self):
return repr(self.data)
def __add__(self, other):
return tuple((a+b for a,b in zip(self.data, other.data)))
def __sub__(self, other):
return tuple((a-b for a,b in zip(self.data, other.data)))
Vector(1, 2, 3) - Vector(1, 1, 1)
試試這個。
:
list(numpy.array(list1)-numpy.array(list2))
如果不刪除列表
import numpy as np
a = [2,2,2]
b = [1,1,1]
np.subtract(a,b)
對於曾經在Pycharm上編碼的人,它也會復活其他人。
import operator
Arr1=[1,2,3,45]
Arr2=[3,4,56,78]
print(list(map(operator.sub,Arr1,Arr2)))
`[i - j for i,j in zip(a,b)]`更具可讀性,並且不會用a和b中的項代替a和b。 – 2012-06-07 07:59:26