如何从python中的上一个元素中减去一个元素?

时间:2019-05-14 04:30:42

标签: python list subtraction

我正在编写一个脚本,该脚本使我获得了利润上的差异,该差异代表我在业务中又购买了一个要素。我有一份清单,其中包含我每月购买一,二,三个要素的信息……

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

我尝试过:

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

及其一些变体,但出现错误“

  

列表索引超出范围

”,因为Python不允许这样做:for语句中的list [x]。

我已经看到需要导入一些软件包的解决方案。但是我正在学习,并且希望使用基本工具(for,while,if)来做到这一点。

可以用这种方式做到吗?

5 个答案:

答案 0 :(得分:2)

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

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]

答案 1 :(得分:2)

要获取差异列表,请执行以下操作:

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

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

答案 2 :(得分:1)

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

例如对于列表aList = [3, 5, 2, 5, 8, 12],由于aList [0]为3

,因此在第一次迭代中x等于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]将引用aList之后的aList[-1]x = 0)的最后一个元素,因此它将是{{1} }或aList[0] = aList[0] - aList[0-1]

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

x_prev

答案 3 :(得分:0)

首先,您尝试在循环中访问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]

答案 4 :(得分:0)

这可能对您有帮助

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)