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
python  list  set 

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

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


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)

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.


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

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

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']) )
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.