173 votes

Python set to list

Comment convertir un ensemble en une liste en Python ? Utiliser

a = set(["Blah", "Hello"])
a = list(a)

ne fonctionne pas. Ça me donne :

TypeError: 'set' object is not callable

256voto

phihag Points 89765

Votre code fait fonctionne (testé avec cpython 2.4, 2.5, 2.6, 2.7, 3.1 et 3.2) :

>>> a = set(["Blah", "Hello"])
>>> a = list(a) # You probably wrote a = list(a()) here or list = set() above
>>> a
['Blah', 'Hello']

Vérifiez que vous n'avez pas écrasé list par accident :

>>> assert list == __builtins__.list

74voto

gnibbler Points 103484

Vous avez occulté l'ensemble builtin en l'utilisant accidentellement comme nom de variable, voici un moyen simple de reproduire votre erreur

>>> set=set()
>>> set=set()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable

La première ligne lie l'ensemble à un instance de l'ensemble. La deuxième ligne essaie de appelez l'instance qui, bien sûr, échoue.

Voici une version moins confuse utilisant des noms différents pour chaque variable. Utilisation d'un nouvel interpréteur

>>> a=set()
>>> b=a()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable

J'espère qu'il est évident qu'appeler a est une erreur

28voto

user3288800 Points 1

Avant d'écrire set(XXXXX) vous avez utilisé "set" comme variable par exemple

set = 90 #you have used "set" as an object
…
…
a = set(["Blah", "Hello"])
a = list(a)

17voto

Nick Points 36

Ça va marcher :

>>> t = [1,1,2,2,3,3,4,5]
>>> print list(set(t))
[1,2,3,4,5]

Cependant, si vous avez utilisé "list" ou "set" comme nom de variable, vous obtiendrez le message :

TypeError: 'set' object is not callable

eg :

>>> set = [1,1,2,2,3,3,4,5]
>>> print list(set(set))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable

La même erreur se produira si vous avez utilisé "liste" comme nom de variable.

8voto

peerxu Points 33
s = set([1,2,3])
print [ x for x in iter(s) ]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X