2013-06-10 4 views
-7

예의 요소들 사이의 서로 다른 : 당신은 매우 큰 목록을 사용하는 경우파이썬 목록 : 동일 목록

Nums = [5,17,21,29] 
Result = [12,16,24] 

계산

absolute(5-17) = 12 
absolute(5-21) 
abs(5-24) 
+4

무엇이 문제입니까? – mishik

답변

3

당신이 나머지 첫 번째 요소를 빼야 할 경우,

Result = [abs(Nums[0] - item) for item in Nums[1:]] 
1
>>> Nums = [5,17,21,29] 
>>> [abs(Nums[0] - x) for x in Nums[1:]] 
[12, 16, 24] 

, 당신은 얕은 복사를 방지 할 수 있습니다 [1:]itertools.islice을 사용하십시오 (거의 필요하지 않지만).

>>> from itertools import islice 
>>> [abs(Nums[0] - x) for x in islice(Nums, 1, None)] 
[12, 16, 24] 
1

첫 번째 항목에서만 작업하는 경우 다음 반복자를 만들 iter()을 사용할 수 있습니다, 이것은 더 많은 메모리를 효율적으로 할 것

>>> n = 0 
>>> [abs(lis[n] - x) for i,x in enumerate(lis) if i != n] 
[12, 16, 24] 
>>> n = 1 
>>> [abs(lis[n] - x) for i,x in enumerate(lis) if i != n] 
[12, 4, 12] 
,691 : 그냥 0 번째되지 않은 인덱스 일 수 있습니다

>>> lis = [5,17,21,29] 
>>> it = iter(lis) 
>>> item = next(it) 
>>> [abs(item - x) for x in it] 
[12, 16, 24] 

또 다른 방법 : @ karthikr/@ jamylak의 버전보다 큰 목록에 아마 빠른

+0

+1 얕은 사본을 피하기 위해 목록이 거대한 경우이를 수행합니다. – jamylak