问题描述
我的代码有问题。我对 Python 还是个新手,但我很欣赏任何朝着正确方向前进的努力。我正在尝试对一系列数字进行排序并返回排序。我不是在寻求答案,而是寻求指导以帮助我更正自己的代码。
我不知道如何解决超出范围的问题。我需要在某处添加 -1 吗?
def interleaved(seq1,seq2):
seq1= [-7,-2,-1]
seq2= [-4,4,8]
i = 0
j = 0
res = []
while i <len(seq1) and j <len(seq2):
print(i,j,seq1[i],seq2[j])
i+=1
j+=1
if seq1[i] <seq2[j]:
print(res)
i+=1
res.append(seq1[i])
if seq1[i]> seq2[j]:
print(res)
j+=1
res.append(j)
return res
解决方法
你需要更好地澄清问题并写下你想要做什么。但是,在这种情况下,您正在谈论的超出范围的问题是因为您在运行 if 循环之前增加了 i 和 j。
while i <len(seq1) and j <len(seq2):
print(i,j,seq1[i],seq2[j])
i+=1
j+=1
当此 while 循环从 i == 2
开始时,代码的第三行将 i
的值增加到 3,因此无法执行 if 循环,因为索引超出范围。
您可以通过添加 break
来解决此问题,但何时何地添加它取决于您希望代码做什么。
在这里,我采用 *argv 参数,以便您可以传递所需的列表数量。然后我创建一个主列表,所有列表都连接在一起。然后我循环遍历元素并在顺序不正确时进行交换
def interleaved(*seq):
res=[]
for x in seq:
res.extend(x)
for i in range(len(res)-1):
if res[i] > res[i+1]:
res[i],res[i+1]=res[i+1],res[i]
return res
seq1= [-7,-2,-1]
seq2= [-4,4,8]
print(interleaved(seq1,seq2))