【发布时间】:2013-06-05 17:44:15
【问题描述】:
例子:
Nums = [5,17,21,29]
Result = [12,16,24]
计算
absolute(5-17) = 12
absolute(5-21)
abs(5-24)
【问题讨论】:
例子:
Nums = [5,17,21,29]
Result = [12,16,24]
计算
absolute(5-17) = 12
absolute(5-21)
abs(5-24)
【问题讨论】:
>>> Nums = [5,17,21,29]
>>> [abs(Nums[0] - x) for x in Nums[1:]]
[12, 16, 24]
如果您使用非常大的列表,则可以使用 itertools.islice 避免浅表复制 [1:](尽管这几乎没有必要)
>>> from itertools import islice
>>> [abs(Nums[0] - x) for x in islice(Nums, 1, None)]
[12, 16, 24]
【讨论】:
如果你想用剩余的元素减去第一个元素,
Result = [abs(Nums[0] - item) for item in Nums[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]
【讨论】: