Accéder à une valeur dans un tuple qui se trouve dans une liste


88
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]

Comment renvoyer la 2ème valeur de chaque tuple dans cette liste?

Sortie désirée:

[2, 3, 5, 4, 7, 7, 8]

Réponses:


100

Avec une compréhension de liste .

[x[1] for x in L]

52
Je comprends que c'est une question simple. Est-ce que SO est un endroit si élitiste? Essayez de googler la question, les résultats ne sont pas ce dont j'ai besoin. J'ai appris Python à la dure et je n'ai pas trouvé cela là-dedans. J'ai déjà posé des questions sur la meilleure approche pour apprendre Python et la réponse unanime est d'obtenir un livre de base et de plonger dedans. pour si loin? De plus, votre commentaire n'est vraiment pas utile et décourage les nouveaux membres débutants de publier sur SO.
super9

1
@Nai: Je suggère de lire le tutoriel Python: docs.python.org/tutorial/index.html . En général, la documentation est très bonne. Et parfois, il suffit d'essayer;)
Felix Kling

19
J'ai googlé "accéder à l'élément dans le tuple" avec l'intention d'accéder à un élément dans une liste de tuple. Cela m'a amené à votre question alors merci. Je suis assez nouveau sur Python et je ne trouve pas la réponse particulièrement intuitive, mais ce n'est que moi!
Patrick Williams

7
Je pensais que tout le concept avec SO était de faciliter la recherche de réponses à vos questions. Pourquoi une question doit-elle présenter une certaine difficulté pour être valable? Bonne question, bonne réponse.
Sceluswe

3
Brillant! Une réponse courte, précise et précise à une question courte, précise et précise. Vous venez de faire ma journée!
Eric M

82

La réponse d'Ignacio est ce que vous voulez. Cependant, en tant que personne apprenant également Python, laissez-moi essayer de le disséquer pour vous ... Comme mentionné, il s'agit d'une compréhension de liste (traitée dans DiveIntoPython3 , par exemple). Voici quelques points:

[x[1] for x in L]

  • Notez les []'s autour de la ligne de code. C'est ce qui définit une liste. Cela vous indique que ce code renvoie une liste, donc c'est du listtype. Par conséquent, cette technique est appelée une «compréhension de liste».
  • L est votre liste d'origine. Vous devez donc définir L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]avant d'exécuter le code ci-dessus.
  • xest une variable qui n'existe que dans la compréhension - essayez d'accéder en xdehors de la compréhension, ou tapez type(x)après avoir exécuté la ligne ci-dessus et elle vous le dira NameError: name 'x' is not defined, alors que type(L)retourne <class 'list'>.
  • x[1]pointe vers le deuxième élément de chacun des tuples alors x[0]que pointerait vers chacun des premiers éléments.
  • Donc, cette ligne de code lit littéralement "retourne le deuxième élément d'un tuple pour tous les tuples de la liste L."

Il est difficile de dire à quel point vous avez tenté le problème avant de poser la question, mais peut-être que vous n'étiez tout simplement pas familier avec les compréhensions? Je passerais du temps à lire le chapitre 3 de DiveIntoPython , ou toute ressource sur les compréhensions. Bonne chance.


4
Dans 2.x, xexistera en dehors du LC, avec la dernière valeur qui lui est liée. Ceci est corrigé dans 3.x.
Ignacio Vazquez-Abrams

Je ne m'en suis pas rendu compte. Merci pour l'info.
gary

4
Explication géniale @gary. J'apprécie particulièrement que vous ayez souligné à quoi L se réfère.
Patrick Williams

Merci pour les commentaires @PatrickWilliams. Je suis content que cela aide. Vous pourriez aussi le faire, [x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]]mais ce n'est pas aussi facile pour les yeux.
gary

5

Une compréhension de liste est absolument le moyen de le faire. Un autre moyen qui devrait être plus rapide est mapet itemgetter.

import operator

new_list = map(operator.itemgetter(1), old_list)

En réponse au commentaire selon lequel le PO n'a pas pu trouver de réponse sur google, je vais souligner une façon super naïve de le faire.

new_list = []
for item in old_list:
    new_list.append(item[1])

Cela utilise:

  1. Déclarer une variable pour référencer une liste vide.
  2. Une boucle for.
  3. Appel de la appendméthode sur une liste.

Si quelqu'un essaie d'apprendre une langue et ne peut pas assembler ces éléments de base pour lui-même, il doit le considérer comme un exercice et le faire lui-même, même si cela prend vingt heures.

Il faut apprendre à réfléchir à ce que l'on veut et à le comparer aux outils disponibles . Chaque élément de ma deuxième réponse devrait être couvert dans un didacticiel de base. Vous ne pouvez pas apprendre à programmer sans en lire un .


2

OU vous pouvez utiliser 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]
>>> 

1

Vous pouvez également utiliser le déballage séquentiel avec 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)

Cela crée également un tuple à _partir des premiers éléments supprimés. Extraire uniquement la seconde est possible, mais plus verbeux:

from itertools import islice

res = next(islice(zip(*L), 1, None))

0
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))

1
Veuillez expliquer un peu votre réponse afin qu'elle soit plus facile à comprendre pour les autres qui la recherchent.
herrbischoff le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.