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.
муад

5
@mouad Ні, рядок в дужках в а TypeError- це назва типу , а не назва змінної
phihag

7
@Judge Джон Дід: Ви list = some_setдесь робили . Додайте, print listперш ніж зателефонувати.
Jochen Ritzel

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'](видалено __ через обмеження char)

@Judge Джон Дід У якому рядку ви отримуєте помилку? У вас setдобре виглядає.
phihag

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

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]

Однак якщо ви використовували "list" або "set" як ім'я змінної, ви отримаєте:

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

Ця ж помилка виникне, якщо ви використовували "list" як ім'я змінної.




2

Спробуйте використовувати поєднання функцій карти та лямбда:

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.