基本上,我正在尝试使用第一个索引合并冗余对,并在此功能之前按第一个索引对列表进行排序。
但是,当我增加列表的大小(因此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)
问题发生在第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):
我想那行得通,但我不知道输出是否正确。
希望有所帮助