2010-06-17 6 views
5

En python, lorsque vous avez une liste de tuples, vous pouvez itérer sur eux. Par exemple, lorsque vous avez des points 3D puis:Comment puis-je parcourir seulement la première variable d'un tuple?

for x,y,z in points: 
    pass 
    # do something with x y or z 

Que faire si vous voulez seulement utiliser la première variable, ou la première et la troisième. Y a-t-il un symbole de saut en python?

Répondre

8

Est-ce que quelque chose vous empêche de ne pas toucher à des variables qui ne vous intéressent pas? Il y a une utilisation conventionnelle du trait de soulignement en Python pour indiquer une variable qui ne vous intéresse pas. E.g .:

for x, _,_ in points: 
    print(x) 

Vous devez comprendre que ceci est juste une convention et n'a aucune incidence sur les performances.

+1

Ceci était un exemple. Normalement, je peux avoir 4 variables dans un tuple, et je suis trop paresseux pour inventer de nouveaux noms de variables. –

+2

@Peter: Vous n'avez pas besoin d'avoir de * bons * noms pour les variables que vous n'utilisez pas. – SilentGhost

+1

En fait '_' est probablement le nom de variable le moins descriptif que vous pourriez trouver ;-) Ou ce serait, si ce n'était pas pour cette convention. –

7

Oui, le trait de soulignement:

>>> a=(1,2,3,4) 
>>> b,_,_,c = a 
>>> b,c 
(1, 4) 

Ce n'est pas exactement 'sauter', juste une convention. Underscore variable devient toujours la valeur attribuée:

>>> _ 
3 
+0

Les informations concernant '_' sont intéressantes. Donc 'a, a, a = (1, 2, 3)' fonctionne réellement ... – Dario

+0

@Dario Je ne recommanderais pas cela, car il est difficile de lire et de comprendre quelle valeur vous attendez dans un – unbeli

+0

Oui, je ne l'utiliserais * pas * pour cette raison, mais je pensais que Python l'interdirait donc. – Dario

5

Une façon courante de le faire est d'utiliser underscores pour les variables inutilisées:

for x, _, z in points: 
    # use x and z 

Cela ne fait pas vraiment quelque chose de différent de ce que vous avez écrit. Le trait de soulignement est une variable normale comme les autres. Mais cela montre aux gens qui lisent votre code que vous n'avez pas l'intention d'utiliser la variable.

Il est déconseillé de le faire dans l'invite interactive car _ a une signification particulière ici: la valeur de la dernière instruction/expression d'exécution.

3

Bien que ce ne soit pas aussi lisse que vous demandez peut-être cela est plus lisible pour vos intentions de donner des noms significatifs que les indices de tuples que vous aimez:

for each in points: 
    x = each[0] 
    # do something with x 
0

En Python 3.1, vous pouvez utiliser un astérisque devant un identifiant sur le côté gauche d'une assignation de tuple et il va aspirer tout ce qui reste. Cette construction gérera un nombre variable d'éléments de tuple. Comme ceci:

>>> tpl = 1,2,3,4,5 
>>> a, *b = tpl 
>>> a 
1 
>>> b 
>>> (2, 3, 4, 5) 

Ou dans divers ordres et combinaisons:

>>> a, *b, c = tpl 
>>> a 
1 
>>> b 
(2, 3, 4) 
>>> c 
5 

Ainsi, pour le cas où vous avez parlé, vous êtes seulement intéressé par le premier élément, utilisez * _ pour aspirer et supprimez les éléments restants dont vous ne tenez pas compte:

>>> a, *_ = tpl 
>>> a 
1