Python установлен в список

Как преобразовать набор в список в Python? Используя

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

не работает. Это дает мне:

TypeError: 'set' object is not callable

Ответ 1

Ваш код работает (тестируется с помощью cpython 2.4, 2.5, 2.6, 2.7, 3.1 и 3.2):

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

Убедитесь, что вы случайно не перезаписали list:

>>> assert list == __builtins__.list

Ответ 2

Вы затеняли встроенный набор, случайно используя его как имя переменной, вот простой способ реплицировать вашу ошибку.

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

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

Вот более запутанная версия, использующая разные имена для каждой переменной. Использование свежего интерпретатора

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

Надеюсь, что вызов a является ошибкой

Ответ 3

прежде чем писать set(XXXXX) вы использовали "set" в качестве переменной например

set = 90 #you have used "set" as an object
…
…
a = set(["Blah", "Hello"])
a = list(a)

Ответ 4

Это будет работать:

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

Однако, если вы использовали "список" или "установить" в качестве имени переменной, вы получите:

TypeError: 'set' object is not callable

например:

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

Такая же ошибка возникает, если вы использовали "список" в качестве имени переменной.

Ответ 5

Ваш код работает с Python 3.2.1 на Win7 x64

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

Ответ 6

s = set([1,2,3])
print [ x for x in iter(s) ]

Ответ 7

Попробуйте использовать комбинацию карт и лямбда-функций:

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

Это очень удобный подход, если у вас есть набор чисел в строке, и вы хотите преобразовать его в список целых чисел:

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