Python mis à la liste


159

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

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

ne fonctionne pas. Ça me donne:

TypeError: 'set' object is not callable
python  list  set 

6
Ce qui précède fonctionne pour moi sur Python 2.7.
aukaost le

20
si vous avez nommé une autre variable dans votre code, setmodifiez-la car vous observez la fonction intégrée set.
mouad le

5
@mouad Non, la chaîne entre parenthèses dans a TypeErrorest le nom du type , pas le nom de la variable
phihag

7
@Judge John Deed: Vous l'avez fait list = some_setquelque part. Ajoutez print listavant de l'appeler.
Jochen Ritzel le

6
J'ai rencontré ce problème lors du débogage dans PDB où «list» est remplacé en tant que commande PDB.
WP McNeill

Réponses:


242

Votre code ne travail (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é listpar accident:

>>> assert list == __builtins__.list

2
Je viens de copier et coller ce code exact dans IDLE; J'obtiens l'erreur.

Pouvez-vous fournir la sortie de dir(set)et print set?
Susam Pal

['and', 'class', 'cmp', 'contains', 'delattr', 'doc', 'eq', 'format', 'ge', 'getattribute', 'gt', 'hash', 'iand', 'init', 'ior', 'isub', 'iter', 'ixor', 'le', 'len', 'lt', 'ne', 'new', 'or', 'rand', 'reduce', 'reduce_ex', 'repr', 'ror', 'rsub', 'rxor', 'setattr', 'sizeof', 'str', 'sub', 'subclasshook', 'xor', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update'](supprimé __ en raison de la limite de caractères)

@Judge John Deed À quelle ligne obtenez-vous l'erreur? Vous avez l' setair bien.
phihag

essayez Set au lieu de set: REF: docs.python.org/2/library/sets.html
Gonzalo

72

Vous avez masqué 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 renvoie l'ensemble vers une instance de l'ensemble. La deuxième ligne tente d' appeler l'instance qui échoue bien sûr.

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

>>> 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 que l'appel aest une erreur


25

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)

15

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



4

Votre code fonctionne avec Python 3.2.1 sur Win7 x64

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

2

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 en chaîne et que vous souhaitez le convertir en liste d'entiers:

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.