通过从另一个列表的第n个值中减去第n + 1个值来创建列表

时间:2017-10-19 19:01:11

标签: python python-2.7 list

我需要创建一个列表,该列表返回另一个列表的第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]

4 个答案:

答案 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)

使用ziplist 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]时,输出只是一个空列表[]