지금은 목록으로 표현 된 vector3 값이 있습니다. vector3 값 중 2 개를 빼는 방법이 있습니까?
[2,2,2] - [1,1,1] = [1,1,1]
튜플을 사용해야합니까?
이들 중 어느 것도 이러한 유형에 대해 이러한 피연산자를 정의하지 않으면 대신 정의 할 수 있습니까?
그렇지 않다면 새로운 vector3 클래스를 만들어야합니까?
답변:
여기에 목록 이해에 대한 대안이 있습니다. 매핑은 목록 (후자의 인수)을 반복하여 동시에 수행하고 해당 요소를 함수 (첫 번째 인수)에 인수로 전달합니다. 결과 목록을 반환합니다.
map(operator.sub, a, b)
이 코드는 구문이 적기 때문에 (나에게 더 심미적입니다), 길이가 5 인 목록의 경우 40 % 더 빠릅니다 (bobince의 의견 참조). 그래도 두 솔루션 모두 작동합니다.
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)
단순한 하나 이상의 라이너를 수행 할 계획이라면 자신의 클래스를 구현하고 케이스에 적용되는 적절한 연산자를 재정의하는 것이 좋습니다.
에서 촬영 파이썬에서 수학 :
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
arr1=[1,2,3]
arr2=[2,1,3]
ls=[arr2-arr1 for arr1,arr2 in zip(arr1,arr2)]
print(ls)
>>[1,-1,0]
이 답변은 "보통 / 쉽게 이해할 수있는"파이썬 코드를 작성하는 방법을 보여줍니다.
나는 zip
실제로 모든 사람이 그것에 대해 알지 못하므로 사용하지 않는 것이 좋습니다 .
솔루션은 목록 이해 와 공통 내장 함수를 사용합니다.
a = [2, 2, 2]
b = [1, 1, 1]
result = [a[i] - b[i] for i in range(len(a))]
Python에서 가장 기본적인 기능 만 사용하므로 권장됩니다.
a = [2, 2, 2]
b = [1, 1, 1]
result = [x - b[i] for i, x in enumerate(a)]
a = [2, 2, 2]
b = [1, 1, 1]
result = list(map(lambda x, y: x - y, a, b))
이 시도:
list(array([1,2,3])-1)