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.
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.
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:
Déclarer une variable pour référencer une liste vide.
Une boucle for.
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 .
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 dulist
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 enx
dehors de la compréhension, ou tapeztype(x)
après avoir exécuté la ligne ci-dessus et elle vous le diraNameError: name 'x' is not defined
, alors quetype(L)
retourne<class 'list'>
.x[1]
pointe vers le deuxième élément de chacun des tuples alorsx[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.
la source
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
etitemgetter
.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 .
la source
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] >>>
la source
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))
la source
a = [(0,2), (4,3), (9,9), (10,-1)] print(list(map(lambda item: item[1], a)))
la source