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
python  list  set 

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

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


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)

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.



4

Su código funciona con Python 3.2.1 en Win7 x64

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

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']) )
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.