¿Cómo dividir una lista de 2-tuplas en dos listas?

Tengo una lista de muchos 2-tuples. Me gustaría dividir la lista en dos listas, una lista que consta de los primeros elementos de todas las tuplas de la lista y la otra lista que consta de los segundos elementos de todas las tuplas. Me pregunto cómo hacerlo de manera eficiente? ¡Gracias!

Por ejemplo, tengo una lista y :

 >>> y = [('ab',1), ('cd', 2), ('ef', 3) ] >>> type(y)  

Espero obtener dos listas ['ab', 'cd', 'ef'] y [1, 2, 3] .

 a,b = zip(*y) 

es todo lo que necesitas …

O si los necesitas como listas y no como tuplas.

 a,b = map(list,zip(*y)) 

Usa zip y una lista de comprensión :

 >>> y = [('ab', 1), ('cd', 2), ('ef', 3)] >>> a,b = [list(c) for c in zip(*y)] >>> a ['ab', 'cd', 'ef'] >>> b [1, 2, 3] >>> 

zip con * argumento desempaquetado le dará tuplas:

 >>> a, b = zip(*y) >>> a ('ab', 'cd', 'ef') >>> b (1, 2, 3) 

Si necesitas listas, puedes usar el mapa en eso:

 >>> a, b = map(list, zip(*y)) >>> a ['ab', 'cd', 'ef'] >>> b [1, 2, 3] 

prueba esto:

 def get_list(tuples): list1 = [] list2 = [] for i in tuples: list1.append(i[0]) list2.append(i[1]) return list1, list2 y = [('ab',1), ('cd', 2), ('ef', 3) ] letters, numbers = get_list(y) 

Una forma de hacerlo es primero convertir la lista en un diccionario temporal, luego asignar las claves y los valores del diccionario temporal en dos listas

 y = [('ab', 1), ('cd', 2), ('ef', 3)] temp_d = dict(y) list1 = temp_d.keys() list2 = temp_d.values() print list1 print list2 
 l1 = [] l2 = [] for i in y: l1.append(i[0]) l2.append(i[1]) 

l1 [‘ab’, ‘cd’, ‘ef’] l2 [1, 2, 3]

Anexando cada valor a otro