web-dev-qa-db-fra.com

Récupère une liste d'un ensemble dans python

Comment puis-je obtenir le contenu d'une set() dans list[] forme en Python?

Je dois le faire, car je dois enregistrer la collection dans Google App Engine et les types de propriétés Entity peuvent être des listes, mais pas des ensembles. Je sais que je peux simplement répéter le tout, mais il semble qu'il devrait y avoir un raccourci, ou une "meilleure pratique" pour le faire.

53
Chris Dutrow
>>> s = set([1, 2, 3])
>>> list(s)
[1, 2, 3]

Notez que la liste que vous obtenez n'a pas d'ordre défini.

64
Sven Marnach

Voir la réponse de Sven, mais j'utiliserais plutôt la fonction sorted(): de cette façon, vous obtenez les éléments dans un ordre prévisible de Nice (afin que vous puissiez comparer les listes par la suite, par exemple).

>>> s = set([1, 2, 3, 4, 5])
>>> sorted(s)
[1, 2, 3, 4, 5]

Bien sûr, les éléments définis doivent être triables pour que cela fonctionne. Vous ne pouvez pas trier les nombres complexes (voir le commentaire de gnibbler). Dans Python 3, vous ne pouvez pas non plus trier un ensemble avec des types de données mixtes, par exemple set([1, 2, 'string']).

Vous pouvez utiliser sorted(s, key=str), mais cela ne vaut peut-être pas la peine dans ces cas.

65
Petr Viktorin
>>> a = [1, 2, 3, 4, 2, 3]
>>> b = set(a)
>>> b
set([1, 2, 3, 4])
>>> c = list(b)
>>> c
[1, 2, 3, 4]
>>> 
2
sam