Python establecido en la lista

159

¿Cómo puedo convertir un conjunto en una lista en Python? Utilizando

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

no funciona Me da:

TypeError: 'set' object is not callable

fuente
66
Lo anterior funciona para mí en Python 2.7.
aukaost
20
si nombró otra variable en su código, setcámbiela porque está sombreando la función incorporada set.
mouad
55
@mouad No, la cadena entre paréntesis en a TypeErrores el nombre del tipo , no el nombre de la variable
phihag
77
@ Juez John Deed: Lo hiciste en list = some_setalguna parte. Agregue print listantes de llamarlo.
Jochen Ritzel
66
Llegué a este problema mientras depuraba en PDB donde 'lista' se anula como un comando PDB.
WP McNeill

Respuestas:

242

Su código hace el trabajo (probado con CPython 2.4, 2.5, 2.6, 2.7, 3.1 y 3.2):

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

Comprueba que no sobrescribiste listpor accidente:

>>> assert list == __builtins__.list
phihag
fuente
2
Acabo de copiar y pegar este código exacto en IDLE; Me sale el error
¿Puede proporcionar la salida de dir(set)y 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'](eliminado __ por límite de char)
@Judge John Deed ¿En qué línea obtienes el error? Tu se setve bien.
phihag
pruebe Set en lugar de set: REF: docs.python.org/2/library/sets.html
Gonzalo
72

Ha sombreado el conjunto incorporado al usarlo accidentalmente como un nombre de variable, aquí hay una manera simple de replicar su error

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

La primera línea vuelve a vincular set a una instancia de set. La segunda línea está tratando de llamar a la instancia que, por supuesto, falla.

Aquí hay una versión menos confusa que usa diferentes nombres para cada variable. Usando un intérprete nuevo

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

Esperemos que sea obvio que llamar aes un error

John La Rooy
fuente
25

antes de escribir set(XXXXX) ha usado "set" como variable, por ejemplo

set = 90 #you have used "set" as an object


a = set(["Blah", "Hello"])
a = list(a)
Zhang Yiwei
fuente
15

Esto funcionará:

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

Sin embargo, si ha utilizado "lista" o "conjunto" como nombre de variable, obtendrá el:

TypeError: 'set' object is not callable

p.ej:

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

Se producirá el mismo error si ha utilizado "lista" como nombre de variable.

Mella
fuente
6
s = set([1,2,3])
print [ x for x in iter(s) ]
peerxu
fuente
4

Su código funciona con Python 3.2.1 en Win7 x64

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

Intente usar la combinación de funciones de mapa y lambda:

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

Es un enfoque muy conveniente si tiene un conjunto de números en cadena y desea convertirlo en una lista de enteros:

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