我正在尝试使用简单的合并函数并省略函数中的排序顺序。问题在这里我得到列表索引超出范围错误20行,elif (lowList[0] >= highList[0])
。
我正在检查,如果此行之前的if
语句中的任何列表为空,那么如果它们为空则不应该执行。但是,我认为Python检查了这一点。有没有解决方法可以解决这个问题。
def merge(my_l, low, high):
middle = int((low + high) / 2)
print(middle)
lowList = my_l[low : middle]
highList = my_l[middle + 1 : high]
my_indx = low
fullList = []
while (lowList is not [] or highList is not []):
if lowList is []:
fullList.append(highList.pop(0))
elif highList is []:
fullList.append(lowList.pop(0))
elif (lowList[0] >= highList[0]):
fullList.append(lowList.pop(0))
else:
fullList.append(highList.pop(0))
return fullList
san = [2, 3, 4, 5, 6, 7]
san = merge(san, 0, len(san) - 1)
print (len(san - 1))
for i in san:
print(i)
感谢您的帮助。
此致 小号
答案 0 :(得分:1)
is
关键字检查identity
,而不是相等。
将==
中的elif
更改为while循环中的'!=',并且不应出现此错误。
要查看此操作,请考虑以下代码:
a = []
b = []
print id(a)
print id(b)
print a is b
print a == b
输出
33444128
33415256
False
True