[(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:
Avec une compréhension de liste .
[x[1] for x in L]
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]
[]
'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 list
type. Par conséquent, cette technique est appelée 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 en x
dehors 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.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.
x
existera en dehors du LC, avec la dernière valeur qui lui est liée. Ceci est corrigé dans 3.x.
[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.
Une compréhension de liste est absolument le moyen de le faire. Un autre moyen 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 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:
append
mé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 .
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é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))
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))