Как преобразовать набор в список в python?

Я пытаюсь преобразовать набор в список в Python 2.6. Я использую этот синтаксис:

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

Однако я получаю следующую трассировку стека:

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

Как я могу это исправить?

Ответ 1

Это уже список

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

Вы хотите что-то вроде

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

ИЗМЕНИТЬ: Вывод вашего последнего комментария

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

Мне интересно, если вы сделали что-то вроде этого:

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

Ответ 2

Вместо:

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

Почему бы не сократить процесс:

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

Это удалит дубликаты из списка и вернет вам список.

Ответ 3

[Изменено] Кажется, вы ранее переопределили "список", используя его как имя переменной, например:

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

И вы получите

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

Ответ 4

Всякий раз, когда вы застреваете в таких проблемах, попробуйте найти тип элемента, который вы хотите преобразовать, используя:

type(my_set)

Затем используйте:

  list(my_set) 

чтобы преобразовать его в список. Теперь вы можете использовать недавно созданный список, как любой обычный список в python.

Ответ 5

Просмотрите свою первую строку. Ваша трассировка стека явно не из кода, который вы вставили здесь, поэтому я не знаю точно, что вы сделали.

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

То, что вы хотели, было 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'>

Исключение "не вызываемое" означает, что вы делали что-то вроде set()() - пытались вызвать экземпляр set.

Ответ 6

Я не уверен, что вы создаете набор с этим синтаксисом ([1, 2]), а не списком. Чтобы создать набор, вы должны использовать set([1, 2]).

Эти скобки просто охватывают ваше выражение, как если бы вы написали:

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

На самом деле не игнорируются, но ничего не делают для вашего выражения.

Примечание: (something, something_else) создаст кортеж (но все равно нет списка).

Ответ 7

Python - это динамически типизированный язык, что означает, что вы не можете определить тип переменной, как в C или С++:

type variable = value

или

type variable(value)

В Python вы используете принуждение, если вы меняете типы, или функции init (конструкторы) типов для объявления переменной типа:

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

предоставит вам <type 'set'> ответ.

Если у вас есть список, сделайте следующее:

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

Ответ 8

Просто введите:

list(my_set)

Это превратит набор в форме {'1', '2'} в список в форме ['1', '2'].

Ответ 9

Хммм, я уверен, что в некоторых предыдущих строках у вас есть что-то вроде:

list = set(something)

Я не прав?