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


159

Как я могу преобразовать набор в список в Python? С помощью

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

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

TypeError: 'set' object is not callable
python  list  set 

6
Вышеуказанное работает для меня на Python 2.7.
aukaost

20
если вы назвали другую переменную в своем коде, setизмените ее, потому что вы скрываете встроенную функцию set.
mouad

5
@mouad Нет, строка в скобках в a TypeError- это имя типа , а не имя переменной
phihag

7
@ Судья Джон Дид: Вы list = some_setгде-то сделали . Добавьте, print listпрежде чем позвонить.
Йохен Ритцель

6
Я столкнулся с этой проблемой при отладке в PDB, где «список» переопределяется как команда PDB.
WP McNeill

Ответы:


242

Ваш код делает работу (протестировано с 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
Я просто скопировал и вставил этот точный код в IDLE; Я получаю ошибку.

Можете ли вы предоставить вывод dir(set)и print set?
Сусам Пал

['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'](удалено __ из-за лимита символов)

@ Судья Джон Дид В какой строке вы получаете сообщение об ошибке? Ты setхорошо выглядишь.
Phihag

попробуйте установить вместо набора: REF: docs.python.org/2/library/sets.html
Гонсало

72

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

>>> 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является ошибкой


25

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

set = 90 #you have used "set" as an object


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

15

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

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

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




2

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

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

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

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.