基本 Python - 查找列表中元素之间的差异 - IndexError
Basic Python - finding difference between elements in a list - IndexError
我试图找出一个银行账户连续 5 天的每日增长情况。我创建了一个列表。我需要创建一个新列表来跟踪这些每日增长,以便稍后我可以找到平均增长、最大增长等。我遇到的问题是我不断收到 Indexerror。谁能帮帮我吗?我变得非常沮丧。我以前做过类似的编码(没有确定 2 个元素之间的差异),我没有问题。我向模块添加数学的那一刻,它爆炸了。
代码如下(我拥有所有打印语句的原因是仔细检查以确保列表正确):
acct_balance = [9852.24,9854.25,9954.24,9985.56,10056.98]
index = 0
total = 0
amt_increase = []
while index < len(acct_balance):
if index != 0:
change = acct_balance[index+1] - acct_balance[index]
amt_increase.append(change)
total = total + change
index = index + 1
print('Account balances: ',acct_balance)
print('Daily Increase: ',amt_increase)
print('Total Increases: ',total)
然后当我尝试 运行 时出现以下错误:
Traceback (most recent call last):
File "C:\Users\Rogue\Desktop\Rogue Help\HELP.py", line 9, in <module>
change = acct_balance[index+1] - acct_balance[index]
IndexError: list index out of range
这是学校的,所以我不能使用我以前从未见过的编码,因此不明白。谢谢!
你的循环太复杂了,这让你很难思考索引是如何工作的。用 for
循环替换它应该有助于理清逻辑:
amt_increase = []
for index in range(1, len(acct_balance)):
change = acct_balance[index] - acct_balance[index - 1]
amt_increase.append(change)
total += change
你原来的问题是在最后一步,你试图访问不存在的下一个索引。我将其反转,以便它检查前一天,以便 range
的限制易于阅读。
如果你想更进一步并且对列表推导感到舒服,你可以把循环变成一个单一的表达式(计算 total
除外,但你可以稍后通过多种方式做到这一点) :
amt_increase = [today - yesterday
for today, yesterday
in zip(acct_balance[1:], acct_balance[:-1])]
压缩切片列表可让您以正确的方式排列它们。
acct_balance = [9852.24,9854.25,9954.24,9985.56,10056.98]
acct_increase = []
for index, value in enumerate(acct_balance):
if index == 0:
continue
acct_increase.append(acct_balance[index] - acct_balance[index - 1])
他们说计算机科学中有两件难事:命名约定、缓存未命中和差一错误。
不要在数组中向前看(这会导致您查看末尾),而是在跳过第 0 个元素后总是向后看。也不要使用 while 循环来遍历 python 中的数组,始终使用 for-each 循环。我得到你的作业学分了吗:)
您的循环正在检查列表中是否存在不存在的元素。
你的循环长度是五。因此,如果您在循环的每次迭代中将索引递增 1,您最终将引用列表中不存在的元素 [element 6],并且 python 将抛出一条错误消息 "list index out of range"
如果您再次看到 "list index out of range" 错误,我会检查以确保您没有不小心编写代码来引用列表的边界。
我试图找出一个银行账户连续 5 天的每日增长情况。我创建了一个列表。我需要创建一个新列表来跟踪这些每日增长,以便稍后我可以找到平均增长、最大增长等。我遇到的问题是我不断收到 Indexerror。谁能帮帮我吗?我变得非常沮丧。我以前做过类似的编码(没有确定 2 个元素之间的差异),我没有问题。我向模块添加数学的那一刻,它爆炸了。
代码如下(我拥有所有打印语句的原因是仔细检查以确保列表正确):
acct_balance = [9852.24,9854.25,9954.24,9985.56,10056.98]
index = 0
total = 0
amt_increase = []
while index < len(acct_balance):
if index != 0:
change = acct_balance[index+1] - acct_balance[index]
amt_increase.append(change)
total = total + change
index = index + 1
print('Account balances: ',acct_balance)
print('Daily Increase: ',amt_increase)
print('Total Increases: ',total)
然后当我尝试 运行 时出现以下错误:
Traceback (most recent call last):
File "C:\Users\Rogue\Desktop\Rogue Help\HELP.py", line 9, in <module>
change = acct_balance[index+1] - acct_balance[index]
IndexError: list index out of range
这是学校的,所以我不能使用我以前从未见过的编码,因此不明白。谢谢!
你的循环太复杂了,这让你很难思考索引是如何工作的。用 for
循环替换它应该有助于理清逻辑:
amt_increase = []
for index in range(1, len(acct_balance)):
change = acct_balance[index] - acct_balance[index - 1]
amt_increase.append(change)
total += change
你原来的问题是在最后一步,你试图访问不存在的下一个索引。我将其反转,以便它检查前一天,以便 range
的限制易于阅读。
如果你想更进一步并且对列表推导感到舒服,你可以把循环变成一个单一的表达式(计算 total
除外,但你可以稍后通过多种方式做到这一点) :
amt_increase = [today - yesterday
for today, yesterday
in zip(acct_balance[1:], acct_balance[:-1])]
压缩切片列表可让您以正确的方式排列它们。
acct_balance = [9852.24,9854.25,9954.24,9985.56,10056.98]
acct_increase = []
for index, value in enumerate(acct_balance):
if index == 0:
continue
acct_increase.append(acct_balance[index] - acct_balance[index - 1])
他们说计算机科学中有两件难事:命名约定、缓存未命中和差一错误。
不要在数组中向前看(这会导致您查看末尾),而是在跳过第 0 个元素后总是向后看。也不要使用 while 循环来遍历 python 中的数组,始终使用 for-each 循环。我得到你的作业学分了吗:)
您的循环正在检查列表中是否存在不存在的元素。 你的循环长度是五。因此,如果您在循环的每次迭代中将索引递增 1,您最终将引用列表中不存在的元素 [element 6],并且 python 将抛出一条错误消息 "list index out of range"
如果您再次看到 "list index out of range" 错误,我会检查以确保您没有不小心编写代码来引用列表的边界。