Python 列表索引超出范围错误
好的,我得到了这个错误:Python 列表索引超出范围错误,python,python-3.x,list,Python,Python 3.x,List,好的,我得到了这个错误: File "cows.py", line 34, in <module> if newS[i] <= newS[k]: IndexError: list index out of range 文件“cows.py”,第34行,在 如果新闻[i]Python数组从0索引,因此对于5个元素的列表,迭代将从0到4。“range”函数生成包含上限元素的迭代器,因此,如果将5传递给range,它将为0-5生成迭代器,该迭代器的索引将超出5元素数组的界限 尝
File "cows.py", line 34, in <module>
if newS[i] <= newS[k]:
IndexError: list index out of range
文件“cows.py”,第34行,在
如果新闻[i]Python数组从0索引,因此对于5个元素的列表,迭代将从0到4。“range”函数生成包含上限元素的迭代器,因此,如果将5传递给range,它将为0-5生成迭代器,该迭代器的索引将超出5元素数组的界限
尝试将range函数的参数从range(len(newS))更改为range(len(newS)-1。我只输入了1个速度和位置,所以新闻的长度为1,因此第32行:k=1
将列表索引设置为1,高于for循环之前的列表限制打印出newS
。我猜它不到两个元素大。当I=0,k=1
;当i=last element时,k=last element+1
,因此k超出范围。只需从迭代器范围(len(newS)-1)
中减去1即可。假设其他一切都是正确的,应该可以正常工作,或者您可以初始化k=0
谢谢您的帮助!终于解决了这个问题。
speed = []
pos = []
while True:
try:
print("Enter cow speed and then position: ")
a = int(input("Enter position: "))
b = int(input("Enter speed: "))
pos.append(a)
speed.append(b)
print("Do you want another cow? ")
c = input("Enter 'no' to stop or any other string to have another cow: ")
if c == 'no':
break
else:
continue
except ValueError:
print("Please enter 1 number only.")
continue
newP = []
newS = []
while pos:
mini = pos[0] # arbitrary number in list
for x in pos:
if x < mini:
mini = x
r = pos.index(mini)
newS.append(speed.pop(r))
newP.append(mini)
pos.remove(mini)
newS = newS[::-1]
groups = 1
k = 1
for i in range(len(newS)):
if newS[i] <= newS[k]:
newS[k] = newS[i]
k += 1
else:
k += 1
groups += 1
print(groups)