有人可以帮忙解释这个索引超出范围的问题吗?

问题描述 投票:0回答:1

基本上,我正在尝试使用第一个索引合并冗余对,并在此功能之前按第一个索引对列表进行排序。

但是,当我增加列表的大小(因此len(nums)时,它总是提到索引超出范围,除非我将范围参数“ 1”增加到更大的数字。

有人可以帮助解释为什么会发生这种情况,并且可能是解决此问题的解决方案吗?如果有帮助,此问题基本上是气泡排序。

nums = [[3,4], [5,2], [3,5], [6,7], [5,9], [10,3]]

def Sort(nums):
    for i in range(len(nums)):
        swapped = False
        for j in range(0, len(nums)-1-i):
            if nums[j] > nums[j+1]:
                nums[j], nums[j+1] = nums[j+1], nums[j]
                swapped = True
        if swapped == False:
            break

def Comb(nums):
    for i in range(len(nums)):
        comb = False
        for j in range(0, len(nums)-i-1):
            if ((nums[j])[0]) == ((nums[j+1])[0]):
                ((nums[j])[0]),((nums[j])[1]) = ((nums[j])[0]), ((nums[j+1])[1])
                nums.remove(nums[j+1])
                comb = True
        if comb == False:
            break
    print (nums)

Sort(nums)
Comb(nums)
python function bubble-sort indexoutofrangeexception
1个回答
0
投票

问题发生在第24行:在您的for循环中,j设置为从0到len(nums)-i-3。

但是,当您从nums(第26行)中删除元素时,len(nums)会发生变化,但范围的上限未(且无法更新),因此会发生错误。

((基本上:当您键入:在(0,len(nums)-i-3)范围内时,它会生成一个元组一次,所有值都从0到len(nums)-i-3,j将值。]

您需要某种条件来防止这种情况

for j in range(0, len(nums)-i-3):

            if ((nums[j])[0]) == ((nums[j+1])[0]) and j+1<len(nums):

我想那行得通,但我不知道输出是否正确。

希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.