[(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 listtipo. 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 xfora 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.
xexistirá 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 é mape 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:
appendmé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)))