Tengo una lista a continuación

a = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]

Y tengo dos listas de cadenas y quiero agregarlas a la lista anterior por secuencia para formar una nueva lista.

id = ['pid=1882','pid=1086','pid=180']

lgt = ['38.72347',
 '38.23833',
 '37.64986']

El resultado debería convertirse

new_list = [['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'], 
['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'], 
['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]

He probado el método zip pero el resultado es una tupla, no una lista.

new_list = list(zip(a, id, lgt))

new_list -> [[['1321.', 'Fuji', 'Kto', '776'], 'pid=1882', '38.72347'], 
[['3123.', 'dake', 'Cu', '392'], 'pid=1086', '38.23833'], 
[['123.', 'Hota', 'Cu', '310'], 'pid=180', '37.64986']]]

¡Gracias!

3
goxywood 1 oct. 2019 a las 21:19

4 respuestas

La mejor respuesta

Puede usar zip, pero luego debe descomprimir el elemento de la lista.

a = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]
ids = ['pid=1882', 'pid=1086', 'pid=180']
lgt = ['38.72347', '38.23833', '37.64986']

result = [[*x, y, z] for x, y, z in zip(a, ids, lgt)]
print(result)
# [['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'], ['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'], ['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]
2
benvc 1 oct. 2019 a las 18:31

Con las tuplas generadas al comprimir las tres listas, puede usar el desempaquetado de iteradores para asignar elementos de ids y lgt en una lista para concatenar con los elementos de la lista de a:

[s + r for s, *r in zip(a, ids, lgt)]

Esto devuelve:

[['1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'],
 ['3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'],
 ['123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986']]
2
blhsing 1 oct. 2019 a las 20:05

Puede usar la siguiente solución:

list(zip(*zip(*a), id, lgt))

Resultado:

[('1321.', 'Fuji', 'Kto', '776', 'pid=1882', '38.72347'),
 ('3123.', 'dake', 'Cu', '392', 'pid=1086', '38.23833'),
 ('123.', 'Hota', 'Cu', '310', 'pid=180', '37.64986')]

Si necesita una lista de listas:

list(map(list, zip(*zip(*a), id, lgt)))
1
Mykola Zotko 1 oct. 2019 a las 19:00

Mira esto :

list = [['1321.', 'Fuji', 'Kto', '776'], ['3123.', 'dake', 'Cu', '392'], ['123.', 'Hota', 'Cu', '310']]
id = ['pid=1882','pid=1086','pid=180']
lgt = ['38.72347','38.23833','37.64986']

for index, value in enumerate(list):
    list[index].append(id[index])
    list[index].append(lgt[index])
1
Mykola Zotko 1 oct. 2019 a las 19:27
58190305