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)