Récupérer un élément d'un set

Le
Pierre Maurette
J'ai un set singleton, en fait le but du set est de ne traiter que s'il
est singleton.
Pour en récupérer la valeur, j'ai fait:

for val in theset:
utiliser val

A la relecture ultérieure, c'est épouvantable, enfin, il me semble.
J'ai fait alors:

val = list(theset)[0]

Y a-t-il une autre solution ?

Merci, bonne journée

--
Pierre Maurette
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain BARTHE
Le #1160343
J'ai un set singleton, en fait le but du set est de ne traiter que s'il
est singleton.
Pour en récupérer la valeur, j'ai fait:

for val in theset:
utiliser val

A la relecture ultérieure, c'est épouvantable, enfin, il me semble. J'ai
fait alors:

val = list(theset)[0]

Y a-t-il une autre solution ?

Merci, bonne journée...




Peut-etre theset.__iter__().next()


Mais chez moi, la boucle :

theset = set (range (10))

for val in theset:
print val

Fonctionne sans probleme. Quel est le probleme dans ton cas ?

Sinon, il y a bien : val = theset.pop()
qui renvoie mais supprime en meme temps une des valeurs,
tu devras la rempiler par theset.add (val)

Pierre Maurette
Le #1161463

[...]

Peut-etre theset.__iter__().next()


Mais chez moi, la boucle :

theset = set (range (10))

for val in theset:
print val

Fonctionne sans probleme. Quel est le probleme dans ton cas ?

Sinon, il y a bien : val = theset.pop()
qui renvoie mais supprime en meme temps une des valeurs,
tu devras la rempiler par theset.add (val)


Merci beaucoup. J'avais mal lu la documention, je n'avais pas vu le
second tableau, celui des opérations qui ne s'appliquent pas à
frozenset.
pop() me va très bien, et j'ai trouvé discard() qui allège le code à un
autre endroit.

Mon problème avec la boucle for était du niveau de la coquetterie. Je
vous explique en gros. Je veux faire un calcul et m'assurer de la
cohérence des unités (c'est du CSS, ne pas additionner des px et des em
par exemple. En revanche je peux faire 10px + 5, compris comme 10px +
5px).
Donc, au cours du parse, je remplis un set d'unités. A la fin, je dois
avoir exactement une valeur plus éventuellement un ''. Je discard() le
'', je vérifie que len() du set vaut 1 (singleton), sinon je suis en
"erreur de syntaxe". Je n'ai plus qu'à pop-er cette valeur et à
l'utiliser. Ce qui m'embêtait c'était cette boucle qui ne pouvait être
parcourue qu'une fois et qui risquait d'être étrange à la relecture.

--
Pierre Maurette

Alain BARTHE
Le #1162024

[...]

Peut-etre theset.__iter__().next()


Mais chez moi, la boucle :

theset = set (range (10))

for val in theset:
print val

Fonctionne sans probleme. Quel est le probleme dans ton cas ?

Sinon, il y a bien : val = theset.pop()
qui renvoie mais supprime en meme temps une des valeurs,
tu devras la rempiler par theset.add (val)


Merci beaucoup. J'avais mal lu la documention, je n'avais pas vu le
second tableau, celui des opérations qui ne s'appliquent pas à frozenset.
pop() me va très bien, et j'ai trouvé discard() qui allège le code à un
autre endroit.

Mon problème avec la boucle for était du niveau de la coquetterie. Je
vous explique en gros. Je veux faire un calcul et m'assurer de la
cohérence des unités (c'est du CSS, ne pas additionner des px et des em
par exemple. En revanche je peux faire 10px + 5, compris comme 10px + 5px).
Donc, au cours du parse, je remplis un set d'unités. A la fin, je dois
avoir exactement une valeur plus éventuellement un ''. Je discard() le
'', je vérifie que len() du set vaut 1 (singleton), sinon je suis en
"erreur de syntaxe". Je n'ai plus qu'à pop-er cette valeur et à
l'utiliser. Ce qui m'embêtait c'était cette boucle qui ne pouvait être
parcourue qu'une fois et qui risquait d'être étrange à la relecture.

Re,


En admettant que tu ais une liste, y compris avec des doublons de tes
unites :

l = ["px", "px", "px", "em"]
s = set (l)

if len (s) != 1:
print "probleme"
else:
u, = s

La derniere ligne permet aussi de recuperer la valeur, sans la sortir du
set.

La , est obligatoire pour qu'il considere la partie gauche comme un
tuple de valeurs (ici une seule) a affecter avec le contenu de l'ensemble.

Si on a un ensemble de 3 valeurs : x,y,z = s


MC
Le #1163654
'soir !

Tu peux faire
print iter(s).next()

Mais, bon, ce n'est pas terrible...

En fait, AMHA, le plus simple, c'est de faire une fonction, avec list()
ou iter().next(), au choix, qui retournera ce que tu veux.







--
@-salutations

Michel Claveau
Publicité
Poster une réponse
Anonyme