Tengo problemas para encontrar un código para escribir que combine una lista bidimensional con una lista tridimensional. Por ejemplo, "a" es una lista bidimensional y "b" es una lista tridimensional que me gustaría fusionarlos dos juntos y ordenarlos en orden. Si esto es posible, ¿se puede hacer con una lista de comprensión? Para otro ejemplo, aquí están mis dos listas a continuación.

a = [[7, 28],[28],[28]]
b = [[[3, 9],[3, 9],[3, 9]],[[3, 4],[4, 7],[4, 7]],[[7, 11],[3, 11],[3, 7, 12]]]

Me gustaría que mi resultado sea

c = [[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28]],
     [[3, 4, 28],[4, 7, 28],[4, 7,28]],
     [[7, 11, 28],[3, 11, 28],[3, 7, 12, 28]]]
0
Chris88 6 oct. 2019 a las 20:39

4 respuestas

La mejor respuesta

Esto debería funcionar:

c = [[sorted(i+x) for i in y] for x, y in zip(a,b)]

print(c)
#[[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28]],[[3, 4, 28],[4, 7, 28],[4, 7,28]],[[7, 11, 28],[3, 11, 28],[3, 7, 12, 28]]
1
Simon Fink 6 oct. 2019 a las 17:56

Pruebe esto :

c = [[sorted(i+k) for k in j] for i,j in zip(a,b)]

Salida :

[[[3, 7, 9, 28], [3, 7, 9, 28], [3, 7, 9, 28]], 
 [[3, 4, 28], [4, 7, 28], [4, 7, 28]], 
 [[7, 11, 28], [3, 11, 28], [3, 7, 12, 28]]]

Aquí hay otra forma sin una sola línea:

c = b[:]
for i,j in zip(a,c):
    for k in j:
        k.extend(i)
        k.sort()
1
Arkistarvh Kltzuonstev 6 oct. 2019 a las 18:08

Otro 1-liner, usando enumerate en lugar de zip:

c = [[sorted(s1+a[i]) for s1 in s0] for i, s0 in enumerate(b)]
1
MrFuppes 6 oct. 2019 a las 17:58

En caso de que te apetezca un trazador de líneas:

result = [[sorted(i+x) for i in y] for x, y in zip(a,b)]

print (result)

#[[[3, 9, 7, 28], [3, 9, 7, 28], [3, 9, 7, 28]], [[3, 4, 28], [4, 7, 28], [4, 7, 28]], [[7, 11, 28], [3, 11, 28], [3, 7, 12, 28]]]
2
Henry Yik 6 oct. 2019 a las 17:52
58259762