【问题标题】:Create list by subtracting the nth+1 value from the nth values of another list通过从另一个列表的第 n 个值中减去第 n+1 个值来创建列表
【发布时间】:2017-10-19 19:01:10
【问题描述】:

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

【问题讨论】:

    标签: python python-2.7 list


    【解决方案1】:

    看看这个:

    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]
    

    【讨论】:

      【解决方案2】:

      使用ziplist comprehension

      >>> [ a-b for a,b in zip(mylist[1:], mylist[:-1]) ]
      => [4, 10, 15, 30]
      

      #驱动程序值

      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 更好,因为您不需要像python2 那样为range 生成列表,并且更Pythonic .

      编辑:zip 方法也可以只是zip(mylist[1:], mylist[:])

      【讨论】:

      • 你不需要执行第二个切片; zip() 将在最短序列的末尾停止。
      • 只是一种预防措施。 :D 让我感觉更安全。但请注意。
      • 当然@ChuckM,很高兴为您提供帮助。
      【解决方案3】:
      >>>[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]
      

      【讨论】:

        【解决方案4】:

        另一种方法。

        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],那么输出就是一个空列表[]

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多