Python设置为列表


159

如何在Python中将集合转换为列表?使用

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

不起作用。它给了我:

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

6
以上对我适用于Python 2.7。
aukaost 2011年

20
如果您在代码中命名了另一个变量,请set更改它,因为您正在隐藏内置函数set
mouad 2011年

5
@mouad不,括号中的字符串TypeError类型的名称,而不是变量名称
phihag 2011年

7
@约翰·迪德法官:你在list = some_set某个地方。print list调用前添加。
Jochen Ritzel 2011年

6
我在PDB中调试时遇到此问题,其中“列表”被重写为PDB命令。
WP McNeill 2014年

Answers:


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

['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 2011年

尝试使用Set代替set: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

第一行将set重新绑定到set的实例。第二行试图调用该实例,该实例当然会失败。

这是一个不太混乱的版本,每个变量使用不同的名称。使用新鲜的口译员

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

如果将“列表”用作变量名,则会发生相同的错误。


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

4

您的代码在Win7 x64上与Python 3.2.1兼容

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

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']) )
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.