[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
¿Cómo devuelvo el segundo valor de cada tupla dentro de esta lista?
Salida deseada:
[2, 3, 5, 4, 7, 7, 8]
Respuestas:
Con una lista de comprensión .
[x[1] for x in L]
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 del list
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 acceder x
fuera 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.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.
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
y itemgetter
.
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 .
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]
>>>
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))
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))