Python definido para listar

159

Como posso converter um conjunto em uma lista em Python? Usando

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

não funciona Isso me dá:

TypeError: 'set' object is not callable

fonte
6
O acima funciona para mim no Python 2.7.
26611 aukaost
20
se você nomeou outra variável em seu código, setaltere-a porque você está sombreando a função interna set.
Mouad
5
@mouad Não, a string entre parênteses no um TypeErroré o nome do tipo , não o nome da variável
phihag
7
@ Juiz John Deed: Você fez em list = some_setalgum lugar. Adicione print listantes de chamá-lo.
Jochen Ritzel
6
Eu encontrei esse problema durante a depuração no PDB, onde 'list' é substituído como um comando PDB.
WP McNeill

Respostas:

242

O seu código faz trabalho (testado com CPython 2.4, 2.5, 2.6, 2.7, 3.1 e 3.2):

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

Verifique se você não substituiu listpor acidente:

>>> assert list == __builtins__.list
phihag
fonte
2
Acabei de copiar e colar esse código exato no IDLE; Eu recebo o erro.
Você pode fornecer a saída de dir(set)e print set?
Susam Pal 26/07
['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'](removeu __ por causa do limite de caracteres) #
@ Juiz John Deed Em que linha você recebe o erro? Você setparece bem.
## phihag #
tente Set vez de set: REF: docs.python.org/2/library/sets.html
Gonzalo
72

Você sombreado o conjunto interno usando-o acidentalmente como um nome de variável. Aqui está uma maneira simples de replicar seu erro

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

A primeira linha é reconectada para uma instância do conjunto. A segunda linha está tentando chamar a instância que obviamente falha.

Aqui está uma versão menos confusa, usando nomes diferentes para cada variável. Usando um intérprete novo

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

Espero que seja óbvio que chamar aé um erro

John La Rooy
fonte
25

Antes de escrever, set(XXXXX) você usou "set" como uma variável, por exemplo

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


a = set(["Blah", "Hello"])
a = list(a)
Zhang Yiwei
fonte
15

Isso funcionará:

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

No entanto, se você usou "list" ou "set" como um nome de variável, obterá:

TypeError: 'set' object is not callable

por exemplo:

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

O mesmo erro ocorrerá se você tiver usado "lista" como um nome de variável.

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

Seu código funciona com o Python 3.2.1 no Win7 x64

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

Tente usar a combinação das funções map e lambda:

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

É uma abordagem muito conveniente se você tiver um conjunto de números na string e desejar convertê-lo em uma lista de números inteiros:

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