web-dev-qa-db-fra.com

Python défini dans la liste

Comment puis-je convertir un ensemble en une liste en Python? En utilisant

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

ne fonctionne pas. Ça me donne:

TypeError: 'set' object is not callable
141
user825286

Votre code 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
228
phihag

Vous avez ombragé l’ensemble intégré 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 est reliée à un instance of set. La deuxième ligne tente de call l'instance qui échoue bien sûr.

Voici une version moins déroutante utilisant des noms différents pour chaque variable. Utiliser un interprète frais

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

Espérons qu'il est évident qu'appeler a est une erreur

67
John La Rooy

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)
25
Zhang Yiwei

Cela fonctionnera:

>>> 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:

TypeError: 'set' object is not callable

par exemple:

>>> 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é "list" comme nom de variable.

13
Nick
s = set([1,2,3])
print [ x for x in iter(s) ]
6
peerxu

Votre code fonctionne avec Python 3.2.1 sur Win7 x64

a = set(["Blah", "Hello"])
a = list(a)
type(a)
<class 'list'>
3
Wendal Chen

Essayez d’utiliser une combinaison de fonctions map et lambda:

aList = map( lambda x: x, set ([1, 2, 6, 9, 0]) )

C'est une approche très pratique si vous avez un ensemble de nombres dans une chaîne et que vous voulez le convertir en liste d'entiers:

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
2
IgobyE