Como converter um conjunto em uma lista em python?

144

Estou tentando converter um conjunto em uma lista no Python 2.6. Eu estou usando esta sintaxe:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

No entanto, recebo o seguinte rastreamento de pilha:

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

Como posso consertar isso?

gath
fonte
2
Funciona para mim no Python 2.6.6 no Linux ... mas essa primeira linha não cria um conjunto.
detly
2
De acordo TypeError: 'set' object is not callable: O que é set? Obrigado
comer
13
Você sombreado o conjunto embutido. Talvez você tenha digitado acidentalmente set=set(first_list)ou algo assim. Agora seté redefinido para este objeto definido, o que causaria esse erro. Tente novamente com um interpretador Python fresco
John La Rooy
3
@gnibbler: você deve colocar isso como uma resposta, pois é claramente isso que quebrou.
31411 Chris Morgan
2
Pena que a pergunta foi editada para corrigir o problema. É confuso ver o código correto seguido de um erro que ele não gera. De fato, a pergunta original antes das edições também não causa o erro mostrado. Eu suspeito que este é um erro de copiar e colar.
LS

Respostas:

195

Já é uma lista

type(my_set)
>>> <type 'list'>

Você quer algo como

my_set = set([1,2,3,4])
my_list = list(my_set)
print my_list
>> [1, 2, 3, 4]

EDIT: Saída do seu último comentário

>>> my_list = [1,2,3,4]
>>> my_set = set(my_list)
>>> my_new_list = list(my_set)
>>> print my_new_list
[1, 2, 3, 4]

Gostaria de saber se você fez algo parecido com isto:

>>> set=set()
>>> set([1,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable
do utilizador
fonte
4
Quando eu digito (my_set) eu recebo <type 'set'>
gath
2
@ gath, isso foi antes de você editar o código. Seu código atual funciona bem na minha máquina. Você pode tentar copiar colar isso em um interpretador Python como ele é e cole o resultado aqui
usuário
1
tente isso: >>> my_list = [1,2,3,4] >>> my_set = set (my_list) >>> my_new_list = list (my_set) Traceback (última chamada mais recente): Arquivo "<console>", linha 1, na <module> TypeError: 'set' objeto não é exigível
Gate
1
Aposto que ele acidentalmente ligou o nome 'set' a {1,2,3} ou [1,2,3] ou algo assim. (Porque eu fiz acidentalmente enquanto experimentava)
user3556757
1
Convertendo uma lista inteiro usando este método não é confiável: se o seu conjunto é ([1,2,12,6])e você list(([1,2,12,6]))obterá uma lista como [1,2,1,2,6]
PradyJord
12

Ao invés de:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

Por que não atalho no processo:

my_list = list(set([1,2,3,4])

Isso removerá os dupes da sua lista e retornará uma lista para você.

tonym415
fonte
5
Não há diferença entre ambos. Você acabou de sublinhar as atribuições de variáveis.
7

[EDITADO] Parece que você redefiniu "lista" anteriormente, usando-a como um nome de variável, assim:

list = set([1,2,3,4]) # oops
#...
first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

E você vai conseguir

Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'set' object is not callable
Ruslan Grohovetsky
fonte
5

Sempre que você estiver preso nesse tipo de problema, tente encontrar o tipo de dados do elemento que deseja converter primeiro usando:

type(my_set)

Então, use:

  list(my_set) 

para convertê-lo em uma lista. Você pode usar a lista recém-criada como qualquer lista normal em python agora.

Pawan Kumar
fonte
3

Basta digitar:

list(my_set)

Isso transformará um conjunto no formato {'1', '2'} em uma lista no formato ['1', '2'].

Jesse
fonte
2

Revise sua primeira linha. Seu rastreamento de pilha claramente não é do código que você colou aqui, então não sei exatamente o que você fez.

>>> my_set=([1,2,3,4])
>>> my_set
[1, 2, 3, 4]
>>> type(my_set)
<type 'list'>
>>> list(my_set)
[1, 2, 3, 4]
>>> type(_)
<type 'list'>

O que você queria era set([1, 2, 3, 4]).

>>> my_set = set([1, 2, 3, 4])
>>> my_set
set([1, 2, 3, 4])
>>> type(my_set)
<type 'set'>
>>> list(my_set)
[1, 2, 3, 4]
>>> type(_)
<type 'list'>

A exceção "não exigível" significa que você estava fazendo algo parecido set()()- tentando chamar uma setinstância.

Chris Morgan
fonte
0

Não tenho certeza se você está criando um conjunto com essa ([1, 2])sintaxe, e não uma lista. Para criar um conjunto, você deve usar set([1, 2]).

Esses colchetes estão apenas envolvendo sua expressão, como se você tivesse escrito:

if (condition1
    and condition2 == 3):
    print something

Não é realmente ignorado, mas não faça nada à sua expressão.

Nota: (something, something_else)criará uma tupla (mas ainda não há lista).

Joël
fonte
@ gath sua edição parece bem para mim, pelo menos o primeiro bloco. Você ainda está tendo o erro? Você pode tentar isso em uma nova linha de comando? O que você ganha ao digitar apenas set?
Joël
0

Python é uma linguagem de tipo dinâmico, o que significa que você não pode definir o tipo da variável como faz em C ou C ++:

type variable = value

ou

type variable(value)

No Python, você usa o cocing se alterar os tipos ou as funções init (construtores) dos tipos para declarar uma variável de um tipo:

my_set = set([1,2,3])
type my_set

lhe dará <type 'set'>uma resposta.

Se você tiver uma lista, faça o seguinte:

my_list = [1,2,3]
my_set = set(my_list)
tmaric
fonte
-1

Hmmm, aposto que em algumas linhas anteriores você tem algo como:

list = set(something)

Estou errado ?

Jeannot
fonte
Como mencionado acima em uma das respostas, você também tem a mesma suposição. No código de questão principal, provavelmente foi definido listcomo igual ao conjunto de criação set(values). E isso estava causando confusão. Sua resposta não deve ser rebaixada. Mas também não está enganando os leitores :) Estamos apenas passando despercebidos e vendo coisas erradas com votos negativos.
Vladimir Vukanac 04/11/19