【问题标题】:How to subtract an element from previous one in python?如何从python中的前一个元素中减去一个元素?
【发布时间】:2019-05-14 04:30:41
【问题描述】:

我正在编写一个脚本,该脚本为我提供了代表在我的业务中再购买一个元素的利润差异。我有一个清单,上面列出了我购买一、二、三元素的每月投入...

现在我想知道实际迭代中利润相对于列表中前一个元素的差异。

我试过了:

for x in my_list:
    x = list[x] - list[x-1]

还有一些变体,但我收到错误“

列表索引超出范围

" 因为 Python 不允许在 for 语句中使用:list[x]。

我已经看到需要导入一些包的解决方案。但我正在学习,我想用基本的工具来做(for、while、if)。

这样可以吗?

【问题讨论】:

  • 是的,虽然基本工具也是可能的。

标签: python list subtraction


【解决方案1】:

我不确定我是否完全理解,但这就是你的意思吗?

my_list = [1,2,3,5,7,9]
diff_list = []
for i in range(1,len(my_list)):
    x = my_list[i] - my_list[i-1]
    diff_list.append(x)

print(diff_list)

输出:

[1, 1, 2, 2, 2]

【讨论】:

    【解决方案2】:

    要获取您可以执行的差异列表:

    diffs = [y - x for x, y in zip(my_list, my_list[1:])]
    

    这使用ziplist comprehension 允许您以更方便的方式处理列表中的后续元素。

    【讨论】:

      【解决方案3】:

      您收到错误的原因是您错误地使用了 for 循环,for 循环中的 x 是迭代列表中的当前对象。

      例如对于列表aList = [3, 5, 2, 5, 8, 12],在第一次迭代中 x 将等于 3,因为 aList[0] 是 3

      此外,如果您将代码与 while 循环一起使用,它仍然会产生不希望的结果

      例如

      aList = [3, 5, 2, 5, 8, 12]
      x = 0
      while x < len(aList):
          aList[x] = aList[x] - aList[x-1]
          x += 1
      

      这是因为第一次迭代的 aList[x-1] 将引用自 x = 0 以来 aList (aList[-1]) 的最后一个元素,因此它将是 aList[0] = aList[0] - aList[0-1]aList[0] = 3 - 12

      我的解决方案是枚举列表,将原始“前一个值”(x_prev) 设置为 0,然后从当前元素中减去前一个元素。

      aList = [3, 5, 2, 5, 8, 12]
      x_prev = 0
      for i, x_val in enumerate(aList):
          aList[i] -= x_prev
          x_prev = x_val
      print(aList)
      

      【讨论】:

        【解决方案4】:

        这可能对你有帮助,

        my_list = [1,4,6,8,1,16,47]
        y = 0
        for x in my_list[1:]:
            x1 = x - my_list[y]
            y = y + 1
            print(x1)
        

        【讨论】:

          【解决方案5】:

          首先,您尝试在循环中访问 python 的内置 list,而不是您选择的变量名称 my_list
          其次,你在循环中覆盖你的循环变量 x - 这不是一个好主意。

          然后,通过使用for x in my_list:,x 已经表示列表的每个元素,而不是该列表的索引。您可以通过例如

          在列表的索引上创建迭代
          for i in range(len(my_list)):
          

          我在这里提供索引,所以my_list[i] 在这里有意义。
          做这些range of length of... 构造的更好的python 方法是enumerate
          这个函数在迭代时返回一个计数器一个列表的元素,所以你可以这样写:

          for i, val in enumerate(my_list[1:]):
              x = val - my_list[i]
          

          【讨论】:

          • 谢谢@SpghttCd,我没有遍历索引。这就是问题所在。我不知道为什么有人反对你。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-08
          • 2019-09-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多