[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
Como faço para retornar o segundo valor de cada tupla dentro desta lista?
Saída desejada:
[2, 3, 5, 4, 7, 7, 8]
Respostas:
Com uma compreensão de lista .
[x[1] for x in L]
A resposta de Ignacio é o que você quer. No entanto, como alguém que também está aprendendo Python, deixe-me tentar dissecá-lo para você ... Como mencionado, é uma compreensão de lista (abordada em DiveIntoPython3 , por exemplo). Aqui estão alguns pontos:
[x[1] for x in L]
[]
's ao redor da linha de código. São eles que definem uma lista. Isso informa que este código retorna uma lista, portanto, é do list
tipo. Conseqüentemente, essa técnica é chamada de "compreensão de lista".L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
antes de executar o código acima.x
é uma variável que só existe na compreensão - tente acessar x
fora da compreensão, ou digite type(x)
após executar a linha acima e ela lhe dirá NameError: name 'x' is not defined
, enquanto type(L)
retorna <class 'list'>
.x[1]
aponta para o segundo item em cada uma das tuplas, ao passo x[0]
que apontaria para cada um dos primeiros itens.É difícil dizer o quanto você tentou resolver o problema antes de fazer a pergunta, mas talvez você simplesmente não estivesse familiarizado com compreensões. Eu gastaria algum tempo lendo o Capítulo 3 de DiveIntoPython ou qualquer recurso sobre compreensões. Boa sorte.
x
existirá fora do LC, com o último valor vinculado a ele. Isso foi corrigido no 3.x.
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]
mas não é tão fácil para os olhos.
A compreensão de uma lista é absolutamente a maneira de fazer isso. Outra forma que deve ser mais rápida é map
e itemgetter
.
import operator
new_list = map(operator.itemgetter(1), old_list)
Em resposta ao comentário de que o OP não conseguiu encontrar uma resposta no google, vou apontar uma forma super ingênua de fazer isso.
new_list = []
for item in old_list:
new_list.append(item[1])
Isso usa:
append
método em uma lista.Se alguém está tentando aprender um idioma e não consegue reunir essas peças básicas por si mesmo, precisa ver isso como um exercício e fazer isso sozinho, mesmo que demore vinte horas.
É preciso aprender a pensar sobre o que se quer e comparar com as ferramentas disponíveis . Cada elemento em minha segunda resposta deve ser abordado em um tutorial básico. Você não pode aprender a programar sem ler um .
Você também pode usar a descompactação de sequência com 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)
Isso também cria uma tupla _
dos primeiros elementos descartados. Extrair apenas o segundo é possível, mas mais detalhado:
from itertools import islice
res = next(islice(zip(*L), 1, None))
OU você pode 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]
>>>
Ou 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]
>>>
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))