我需要创建一个列表,该列表返回另一个列表的第n和第n + 1值之间的差异。有没有办法简化下面的代码以适用于任何大小的列表?
mylist = [1,5,15,30,60]
w = mylist[1] - mylist[0]
x = mylist[2] - mylist[1]
y = mylist[3] - mylist[2]
z = mylist[4] - mylist[3]
difflist = [w,x,y,z]
print difflist
这将返回[4,10,15,30]
答案 0 :(得分:7)
看一下这个:
mylist = [1,5,15,30,60]
def diff(myList):
return [myList[i+1] - myList[i] for i in range(len(myList)-1)]
l = diff(mylist)
print(l)
输出结果为:
[4, 10, 15, 30]
答案 1 :(得分:5)
使用zip
和list comprehension
:
>>> [ a-b for a,b in zip(mylist[1:], mylist[:-1]) ]
=> [4, 10, 15, 30]
#driver values
IN : mylist = [1,5,15,30,60]
如果您想要使用index
遍历整个列表的好老式:
>>> [ mylist[i+1]-mylist[i] for i in range(len(mylist)-1) ]
=> [4, 10, 15, 30]
尽管使用zip
比浏览index
更好,因为您不需要生成range
的列表,就像python2
一样,而且更多的 Python化强>
编辑: zip
方法也可以只是zip(mylist[1:], mylist[:])
答案 2 :(得分:4)
>>>[j-i for i, j in zip(mylist[:-1], mylist[1:])]
=> [4, 10, 15, 30]
或者你可能想要考虑numpy。使用numpy,答案是:
>>>import numpy
>>>numpy.diff(mylist)
=>array([ 4, 10, 15, 30])
或
>>>list(numpy.diff(mylist))
=>[4,10,15,30]
答案 3 :(得分:1)
另一种方法。
mylist = [1,5,15,30,60]
def diff(mylist):
return [x - mylist[i - 1] for i, x in enumerate(mylist)][1:]
print(diff(mylist))
# [4, 10, 15, 30]
当列表中有一个元素时,您还必须定义要执行的操作。在所有现有答案(包括此答案)中,如果输入列表中只有一个元素,则会得到一个空列表。例如,当mylist = [1]
时,输出只是一个空列表[]
。