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

144

Estoy tratando de convertir un conjunto en una lista en Python 2.6. Estoy usando esta sintaxis:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

Sin embargo, obtengo el siguiente seguimiento de pila:

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

¿Cómo puedo arreglar esto?

gath
fuente
2
Funciona para mí en Python 2.6.6 en Linux ... pero esa primera línea no crea un conjunto.
detly
2
De acuerdo TypeError: 'set' object is not callable: ¿Qué es set? Gracias
comer
13
Has sombreado el conjunto incorporado. Quizás accidentalmente escribiste set=set(first_list)o algo así. Ahora setse redefine a este objeto establecido que causaría ese error. Inténtalo de nuevo con un nuevo intérprete de Python
John La Rooy el
3
@gnibbler: deberías poner eso como respuesta, ya que eso es claramente lo que lo rompió.
Chris Morgan
2
Es una pena que la pregunta haya sido editada para corregir el problema. Es confuso ver el código correcto seguido de un error que no generará. De hecho, la pregunta original antes de las ediciones tampoco causa el error que se muestra. Sospecho que este es un error de copiar y pegar.
LS

Respuestas:

195

Ya es una lista

type(my_set)
>>> <type 'list'>

Quieres algo como

my_set = set([1,2,3,4])
my_list = list(my_set)
print my_list
>> [1, 2, 3, 4]

EDITAR: Salida de tu último comentario

>>> my_list = [1,2,3,4]
>>> my_set = set(my_list)
>>> my_new_list = list(my_set)
>>> print my_new_list
[1, 2, 3, 4]

Me pregunto si hiciste algo como esto:

>>> set=set()
>>> set([1,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable
usuario
fuente
44
Cuando escribo (my_set) obtengo <type 'set'>
gath
2
@gath, eso fue antes de editar el código. Su código actual funciona bien en mi máquina. Se puede tratar copiar pegar eso en un intérprete de Python como es y pega el resultado aquí
usuario
1
intente esto: >>> my_list = [1,2,3,4] >>> my_set = set (my_list) >>> my_new_list = list (my_set) Traceback (última llamada reciente): Archivo "<consola>", línea 1, en <module> TypeError: el objeto 'set' no es invocable
gath
1
Apuesto a que accidentalmente unió el nombre 'set' a {1,2,3} o [1,2,3] o algo así. (Porque lo hice accidentalmente mientras experimentaba)
user3556757
1
La conversión de una lista entera con este método no es confiable: si su conjunto es ([1,2,12,6])y lo hace list(([1,2,12,6])), obtendrá una lista como [1,2,1,2,6]
PradyJord
12

En vez de:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

¿Por qué no atajar el proceso?

my_list = list(set([1,2,3,4])

Esto eliminará los engaños de su lista y le devolverá una lista.

tonym415
fuente
55
No hay diferencia entre ambos. Acaba de alinear las asignaciones variables.
7

[EDITADO] Parece que anteriormente has redefinido la "lista", usándola como un nombre de variable, como este:

list = set([1,2,3,4]) # oops
#...
first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

Y obtendrás

Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'set' object is not callable
Ruslan Grohovetsky
fuente
5

Siempre que esté atrapado en este tipo de problemas, intente encontrar el tipo de datos del elemento que desea convertir primero usando:

type(my_set)

Luego, use:

  list(my_set) 

para convertirlo en una lista. Puede usar la lista recién creada como cualquier lista normal en Python ahora.

Pawan Kumar
fuente
3

Simplemente escriba:

list(my_set)

Esto convertirá un conjunto en la forma {'1', '2'} en una lista en la forma ['1', '2'].

Jesse
fuente
2

Revisa tu primera línea. Su rastro de pila claramente no proviene del código que ha pegado aquí, por lo que no sé exactamente qué ha hecho.

>>> my_set=([1,2,3,4])
>>> my_set
[1, 2, 3, 4]
>>> type(my_set)
<type 'list'>
>>> list(my_set)
[1, 2, 3, 4]
>>> type(_)
<type 'list'>

Lo que querías era set([1, 2, 3, 4]).

>>> my_set = set([1, 2, 3, 4])
>>> my_set
set([1, 2, 3, 4])
>>> type(my_set)
<type 'set'>
>>> list(my_set)
[1, 2, 3, 4]
>>> type(_)
<type 'list'>

La excepción "no invocable" significa que estaba haciendo algo como set()(): intentar llamar a una setinstancia.

Chris Morgan
fuente
0

No estoy seguro de que esté creando un conjunto con esta ([1, 2])sintaxis, más bien una lista. Para crear un conjunto, debes usar set([1, 2]).

Estos corchetes simplemente envuelven su expresión, como si hubiera escrito:

if (condition1
    and condition2 == 3):
    print something

Realmente no se ignoran, pero no hagas nada a tu expresión.

Nota: (something, something_else)creará una tupla (pero aún no hay una lista).

Joël
fuente
@gath tu edición me parece bien, al menos el primer bloque. ¿Sigues teniendo el error? ¿Puedes probar esto en una nueva línea de comandos? ¿Qué obtienes al escribir solo set?
Joël
0

Python es un lenguaje de tipo dinámico, lo que significa que no puede definir el tipo de la variable como lo hace en C o C ++:

type variable = value

o

type variable(value)

En Python, usa la coacción si cambia los tipos, o las funciones init (constructores) de los tipos para declarar una variable de un tipo:

my_set = set([1,2,3])
type my_set

te dará <type 'set'>una respuesta.

Si tienes una lista, haz esto:

my_list = [1,2,3]
my_set = set(my_list)
tmarico
fuente
-1

Hmmm, apuesto a que en algunas líneas anteriores tienes algo como:

list = set(something)

Me equivoco ?

Jeannot
fuente
Como se mencionó anteriormente en una respuesta, también tiene la misma suposición. En el código principal de la pregunta, probablemente fue listigual a crear un conjunto set(values). Y estaba haciendo confusión. Su respuesta no debe ser rechazada. Pero tampoco está enganchando a los lectores :) Solo estamos hojeando y viendo cosas negativas en contra.
Vladimir Vukanac