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)

Recibo el siguiente error, pero no sé por qué sigo recibiendo este error. // línea 7, en si L1 [-1]

0
Christian Zabala 29 oct. 2017 a las 05:58

4 respuestas

La mejor respuesta

El problema parece estar en la condición en la que el ciclo while continúa: L1 o L2 significa que solo uno de ellos debe ser una lista no vacía.

Su código falla cuando una de esas listas se convierte en una lista vacía, pero la otra no.

Es posible que desee cambiar (si esto está bien para sus requisitos) la condición de

L1 or L2

Para

L1 and L2

Saludos

Znpy

0
znpy 29 oct. 2017 a las 03:06

Puede mantener una verificación de la longitud de las listas y luego usar 'y' en la instrucción 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)
0
Vidhya Vasudevan 29 oct. 2017 a las 03:17
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)

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

0
QuantumEnergy 29 oct. 2017 a las 03:08

Parece que solo está tratando de combinar dos listas y tener el resultado en orden inverso. Si es así, lo siguiente debería ser mucho más simple:

L1 = [7, 106, 17, 1, 28, 103]
L2 = [6, 44, 201, 66, 32, 71]
L3 = sorted(L1 + L2, reverse=True)
print(L3)

Si prefiere utilizar su enfoque, el problema en su código es solo una sangría. Sus cheques len(L1) y len(L2) solo ocurrían en su condición else. Esto debería solucionarlo:

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)
1
CodeSurgeon 29 oct. 2017 a las 03:03