2013-06-10 3 views

ответ

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() создать итератор, это будет эффективной больше памяти и вероятно, быстрее для больших списков, чем @ karthikr/@ jamylak-х версии:

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

Другое решение, которое будет работать для любого индекса не только 0-й:

>>> 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] 
+0

+1 Я бы сделал это, если список был огромен, чтобы избежать мелкой копии – jamylak

Смежные вопросы