Entiendo que esta es una pregunta simple. ¿Es SO un lugar tan elitista? Intente buscar en Google la pregunta, los resultados no son los que necesito. Aprendí Python de la manera difícil y no encontré esto allí. Hice preguntas antes sobre el mejor enfoque para aprender Python y la respuesta unánime es obtener un libro básico y sumergirse en él. Me frustra y no puedo encontrar la solución en ningún libro o material en línea que haya buscado hasta ahora Además, su comentario realmente no es útil y desalienta a los nuevos miembros de publicar en SO.
super9
1
@Nai: sugiero leer el tutorial de Python: docs.python.org/tutorial/index.html . En general, la documentación es muy buena. Y a veces, uno solo tiene que intentarlo;)
Felix Kling
19
Busqué en Google "acceder a un elemento en una tupla" con la intención de acceder a un elemento en una lista de tuplas. Me llevó a tu pregunta, así que gracias. Soy bastante nuevo en Python y no encuentro la respuesta particularmente intuitiva, ¡pero soy solo yo!
Patrick Williams
7
Pensé que todo el concepto de SO era facilitar la búsqueda de respuestas a sus preguntas. ¿Por qué una pregunta debe tener cierta dificultad para ser válida? Buena pregunta, buena respuesta.
Sceluswe
3
¡Brillante! Una respuesta corta, aguda y al grano a una pregunta corta, aguda y al grano. ¡Ambos me alegraron el día!
Eric M
82
La respuesta de Ignacio es lo que quieres. Sin embargo, como alguien que también está aprendiendo Python, déjame intentar analizarlo por ti ... Como se mencionó, es una lista de comprensión (cubierta en DiveIntoPython3 , por ejemplo). Aquí hay algunos puntos:
[x[1] for x in L]
Observe que hay []alrededor de la línea de código. Estos son los que definen una lista. Esto le dice que este código devuelve una lista, por lo que es del listtipo. Por lo tanto, esta técnica se denomina "comprensión de listas".
L es tu lista original. Por lo tanto, debe definir L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]antes de ejecutar el código anterior.
xes una variable que solo existe en la comprensión - intente acceder xfuera de la comprensión, o escriba type(x)después de ejecutar la línea anterior y le dirá NameError: name 'x' is not defined, mientras que type(L)devuelve <class 'list'>.
x[1]apunta al segundo elemento de cada una de las tuplas, mientras x[0]que apuntaría a cada uno de los primeros elementos.
Así que esta línea de código literalmente dice "devolver el segundo elemento en una tupla para todas las tuplas en la lista L."
Es difícil saber cuánto intentó resolver el problema antes de hacer la pregunta, pero ¿tal vez no estaba familiarizado con las comprensiones? Pasaría algún tiempo leyendo el Capítulo 3 de DiveIntoPython , o cualquier recurso sobre comprensiones. Buena suerte.
En 2.x, xexistirá fuera del LC, con el último valor vinculado a él. Esto está arreglado en 3.x.
Ignacio Vazquez-Abrams
No me di cuenta de esto. Gracias por la info.
gary
4
Increíble explicación @gary. Agradezco especialmente que hayas señalado a qué se refiere L.
Patrick Williams
Gracias por los comentarios @PatrickWilliams. Me alegro de que esto ayude. También puedes hacerlo, [x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]pero no es tan agradable a la vista.
gary
5
Una lista de comprensión es absolutamente la forma de hacer esto. Otra forma que debería ser más rápida es mapy itemgetter.
En respuesta al comentario de que el OP no pudo encontrar una respuesta en Google, señalaré una forma súper ingenua de hacerlo.
new_list = []
for item in old_list:
new_list.append(item[1])
Esto usa:
Declarar una variable para hacer referencia a una lista vacía.
Un bucle for.
Llamar al appendmétodo en una lista.
Si alguien está tratando de aprender un idioma y no puede armar estas piezas básicas por sí mismo, entonces debe verlo como un ejercicio y hacerlo por sí mismo, incluso si le lleva veinte horas.
Uno necesita aprender a pensar en lo que quiere y compararlo con las herramientas disponibles . Cada elemento de mi segunda respuesta debe cubrirse en un tutorial básico. No se puede aprender a programar sin leer uno .
La respuesta de Ignacio es lo que quieres. Sin embargo, como alguien que también está aprendiendo Python, déjame intentar analizarlo por ti ... Como se mencionó, es una lista de comprensión (cubierta en DiveIntoPython3 , por ejemplo). Aquí hay algunos puntos:
[x[1] for x in L]
[]
alrededor de la línea de código. Estos son los que definen una lista. Esto le dice que este código devuelve una lista, por lo que es dellist
tipo. Por lo tanto, esta técnica se denomina "comprensión de listas".L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
antes de ejecutar el código anterior.x
es una variable que solo existe en la comprensión - intente accederx
fuera de la comprensión, o escribatype(x)
después de ejecutar la línea anterior y le diráNameError: name 'x' is not defined
, mientras quetype(L)
devuelve<class 'list'>
.x[1]
apunta al segundo elemento de cada una de las tuplas, mientrasx[0]
que apuntaría a cada uno de los primeros elementos.Es difícil saber cuánto intentó resolver el problema antes de hacer la pregunta, pero ¿tal vez no estaba familiarizado con las comprensiones? Pasaría algún tiempo leyendo el Capítulo 3 de DiveIntoPython , o cualquier recurso sobre comprensiones. Buena suerte.
fuente
x
existirá fuera del LC, con el último valor vinculado a él. Esto está arreglado en 3.x.[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]
pero no es tan agradable a la vista.Una lista de comprensión es absolutamente la forma de hacer esto. Otra forma que debería ser más rápida es
map
yitemgetter
.import operator new_list = map(operator.itemgetter(1), old_list)
En respuesta al comentario de que el OP no pudo encontrar una respuesta en Google, señalaré una forma súper ingenua de hacerlo.
new_list = [] for item in old_list: new_list.append(item[1])
Esto usa:
append
método en una lista.Si alguien está tratando de aprender un idioma y no puede armar estas piezas básicas por sí mismo, entonces debe verlo como un ejercicio y hacerlo por sí mismo, incluso si le lleva veinte horas.
Uno necesita aprender a pensar en lo que quiere y compararlo con las herramientas disponibles . Cada elemento de mi segunda respuesta debe cubrirse en un tutorial básico. No se puede aprender a programar sin leer uno .
fuente
O puede usar
pandas
:>>> import pandas as pd >>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)] >>> df=pd.DataFrame(L) >>> df[1] 0 2 1 3 2 5 3 4 4 7 5 7 6 8 Name: 1, dtype: int64 >>> df[1].tolist() [2, 3, 5, 4, 7, 7, 8] >>>
O bien
numpy
:>>> import numpy as np >>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)] >>> arr=np.array(L) >>> arr.T[1] array([2, 3, 5, 4, 7, 7, 8]) >>> arr.T[1].tolist() [2, 3, 5, 4, 7, 7, 8] >>>
fuente
También puede utilizar la secuencia de desembalaje con
zip
:L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)] _, res = zip(*L) print(res) # (2, 3, 5, 4, 7, 7, 8)
Esto también crea una tupla a
_
partir de los primeros elementos descartados. Extraer solo el segundo es posible, pero más detallado:from itertools import islice res = next(islice(zip(*L), 1, None))
fuente
a = [(0,2), (4,3), (9,9), (10,-1)] print(list(map(lambda item: item[1], a)))
fuente