继续在这个程序上出错

时间:2017-10-29 02:58:39

标签: python format

L1 = [7, 106, 17, 1, 28, 103]
L2 = [6, 44, 201, 66, 32, 71]
L1.sort()
L2.sort()
L3 = []
while L1 or L2:
    if L1[-1] < L2[-1]:
        L3.append(L2.pop())
    else:
        L3.append(L1.pop())
        if len(L1) == 0:
            L3 += L2
            break
        if len(L2) == 0:
            L3 += L1
            break
print(L3)

我收到以下错误,但不知道为什么我一直收到此错误。     //第7行,in     如果L1 [-1]&lt; L2 [-1]:     IndexError:列表索引超出范围//

4 个答案:

答案 0 :(得分:1)

看起来您只是想将两个列表组合在一起并将结果反向排序。如果是这样,以下内容应该更简单:

T

如果您更愿意使用您的方法,代码中的问题只是缩进之一。您的L1 = [7, 106, 17, 1, 28, 103] L2 = [6, 44, 201, 66, 32, 71] L3 = sorted(L1 + L2, reverse=True) print(L3) len(L1)只会在len(L2)条件下进行检查。这应该解决它:

else

答案 1 :(得分:0)

问题似乎是在while循环继续的情况下:L1或L2意味着其中只有一个必须是非空列表。

当其中一个列表变为空列表时,您的代码将失败,但另一个列表不会。

您可能希望从

更改(如果这可以满足您的要求)条件
L1 or L2

L1 and L2

祝你好运,

Znpy

答案 2 :(得分:0)

L1 = [7, 106, 17, 1, 28, 103]
L2 = [6, 44, 201, 66, 32, 71]
L1.sort()
L2.sort()
L3 = []
while L1 or L2:
    if L1[-1] < L2[-1]:
        L3.append(L2.pop())
    else:
        L3.append(L1.pop())
    if len(L1) == 0:
        L3 += L2
        break
    if len(L2) == 0:
        L3 += L1
        break
print(L3)
  

输出:[201,106,103,71,66,44,32,28,17,7,6,1]

答案 3 :(得分:0)

您可以检查列表的长度,然后在while语句中使用“和”。

def merge(L1,L2):
   L1 = [7, 106, 17, 1, 28, 103]
   L2 = [6, 44, 201, 66, 32, 71]
   L1.sort()
   L2.sort()
   L3 = []
   if len(L1) == 0 and len(L2) == 0:
      return []
   while L1 and L2:
      if L1[-1] < L2[-1]:
         L3.append(L2.pop())
      else:
         L3.append(L1.pop())
         if len(L1) == 0:
            L3 += L2
            break
         if len(L2) == 0:
            L3 += L1
            break
   print(L3)

merge(L1, L2)