[(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]
Avec un compréhension de la liste .
[x[1] for x in L]
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]
[]
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 = [(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.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.
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:
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.
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]
>>>
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))