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.