지금은 목록으로 표현 된 vector3 값이 있습니다. vector3 값 중 2 개를 빼는 방법이 있습니까?
[2,2,2] - [1,1,1] = [1,1,1]
튜플을 사용해야합니까?
이들 중 어느 것도 이러한 유형에 대해 이러한 피연산자를 정의하지 않으면 대신 정의 할 수 있습니까?
그렇지 않다면 새로운 vector3 클래스를 만들어야합니까?
답변
답변
여기에 목록 이해에 대한 대안이 있습니다. 매핑은 목록 (후자의 인수)을 반복하여 동시에 수행하고 해당 요소를 함수 (첫 번째 인수)에 인수로 전달합니다. 결과 목록을 반환합니다.
map(operator.sub, a, b)
이 코드는 구문이 적기 때문에 (나에게 더 심미적입니다), 길이가 5 인 목록의 경우 40 % 더 빠릅니다 (bobince의 의견 참조). 그래도 두 솔루션 모두 작동합니다.
답변
목록이 a와 b 인 경우 다음을 수행 할 수 있습니다.
map(int.__sub__, a, b)
하지만 그렇게해서는 안됩니다. 아무도 그것이 무엇을 의미하는지 알 수 없습니다.
답변
답변
‘a’와 ‘b’라는 두 개의 목록이있는 경우 다음을 수행 할 수 있습니다. [m - n for m,n in zip(a,b)]
답변
import numpy as np
a = [2,2,2]
b = [1,1,1]
np.subtract(a,b)
답변
약간 다른 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)