web-dev-qa-db-fra.com

Accéder à une valeur dans un tuple figurant dans une liste

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

Comment puis-je renvoyer la 2e valeur de chaque tuple dans cette liste?

Sortie désirée:

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

Avec un compréhension de la liste .

[x[1] for x in L]
90

La réponse d'Ignacio est ce que vous voulez. Cependant, étant donné que quelqu'un apprend également Python, laissez-moi essayer de le disséquer pour vous ... Comme mentionné, il s'agit d'une liste de compréhension (couvert par DiveIntoPython , par exemple). Voici quelques points:

[x[1] for x in L]

  • Notez les [] Autour de la ligne de code. Ce sont ce qui définit une liste. Cela vous dit que ce code retourne une liste, donc c'est du type list. Par conséquent, cette technique s'appelle une "compréhension de liste".
  • L est votre liste originale. Donc, vous devriez 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.
  • x est une variable qui n'existe que dans la compréhension - essayez d'accéder à x en dehors de la compréhension, ou tapez type(x) après avoir exécuté la ligne ci-dessus et il vous dira NameError: name 'x' is not defined, Alors que type(L) renvoie <class 'list'>.
  • x[1] Pointe vers l'élément second dans chacun des n-uplets alors que x[0] Pointe vers chacun des premiers éléments.
  • Donc, cette ligne de code se lit littéralement "retourne le deuxième élément d'un tuple pour tous les n-uplets 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 pas au courant des compréhensions? Je passerais un peu de temps à lire Chapitre 3 de DiveIntoPython , ou n’importe quelle ressource sur la compréhension. Bonne chance.

72
gary

Une compréhension de liste est absolument la façon de faire cela. Une autre façon qui devrait être plus rapide est map et itemgetter.

import operator

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

En réponse au commentaire selon lequel le PO ne pourrait pas trouver de réponse sur Google, je vous indiquerai 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 pour.
  3. Appel de la méthode append sur une liste.

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

Il faut apprendre à penser à 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 tutoriel de base. Vous ne pouvez pas apprendre à programmer sans en lire un.

6
aaronasterling

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
U10-Forward

Vous pouvez également utiliser le décompression de séquence 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 _ des premiers éléments mis au rebut. Extraire seulement la seconde est possible, mais plus prolixe:

from itertools import islice

res = next(islice(Zip(*L), 1, None))
1
jpp