我正在编写一个脚本,该脚本使我获得了利润上的差异,该差异代表我在业务中又购买了一个要素。我有一份清单,其中包含我每月购买一,二,三个要素的信息……
现在,我想知道相对于列表中的上一个元素,实际迭代中的利润差异。
我尝试过:
for x in my_list:
x = list[x] - list[x-1]
及其一些变体,但出现错误“
列表索引超出范围
”,因为Python不允许这样做:for语句中的list [x]。
我已经看到需要导入一些软件包的解决方案。但是我正在学习,并且希望使用基本工具(for,while,if)来做到这一点。
可以用这种方式做到吗?
答案 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:])]
这使用zip和list comprehension来允许您以更方便的方式处理列表中的后续元素。
答案 2 :(得分:1)
出现错误的原因是因为您错误地使用了for循环,for循环中的x是列表中当前对象的迭代。
例如对于列表aList = [3, 5, 2, 5, 8, 12]
,由于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]将引用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)