Jak przekonwertować zestaw na listę w Pythonie?

143

Próbuję przekonwertować zestaw na listę w Pythonie 2.6. Używam tej składni:

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

Jednak otrzymuję następujący ślad stosu:

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

Jak mogę to naprawić?

gath
źródło
2
U mnie działa na Pythonie 2.6.6 w Linuksie ... ale ta pierwsza linia nie tworzy zestawu.
detly
2
Według TypeError: 'set' object is not callable: Co to jest set? Dzięki
zjedz
13
Śledziłeś wbudowany zestaw. Być może przypadkowo wpisałeś set=set(first_list)lub coś. Teraz setjest przedefiniowana do tego obiektu zestawu, co spowodowałoby ten błąd. Spróbuj ponownie ze świeżym tłumaczem
języka
3
@gnibbler: powinieneś podać to jako odpowiedź, ponieważ to wyraźnie to spowodowało.
Chris Morgan,
2
Szkoda, że ​​pytanie zostało zmienione w celu rozwiązania problemu. Widzenie poprawnego kodu, po którym następuje błąd, którego nie wygeneruje, jest mylące. W rzeczywistości pierwotne pytanie przed edycją również nie powoduje pokazanego błędu. Podejrzewam, że jest to błąd kopiowania i wklejania.
LS

Odpowiedzi:

194

To już jest lista

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

Chcesz czegoś takiego

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

EDYCJA: Wyjście twojego ostatniego komentarza

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

Zastanawiam się, czy zrobiłeś coś takiego:

>>> set=set()
>>> set([1,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable
użytkownik
źródło
4
Kiedy wpisuję (my_set), otrzymuję <type 'set'>
gath
2
@gath, to było przed edytowaniem kodu. Twój obecny kod działa dobrze na moim komputerze. Czy możesz spróbować skopiować i wkleić to do interpretera Pythona w takiej postaci, w jakiej jest, i wkleić dane wyjściowe tutaj
użytkownik,
1
spróbuj tego: >>> my_list = [1,2,3,4] >>> my_set = set (my_list) >>> my_new_list = list (my_set) Traceback (ostatnie połączenie): Plik "<console>", linia 1, w <module> TypeError: obiekt 'set' nie jest wywoływany
gath
1
Założę się, że przypadkowo związał nazwę „ustaw” na {1,2,3} lub [1,2,3] lub coś w tym rodzaju. (Ponieważ zrobiłem to przypadkowo podczas eksperymentowania)
user3556757
1
Konwersja listy liczb całkowitych za pomocą tej metody nie jest wiarygodna: jeśli twój zestaw jest ([1,2,12,6])i to zrobisz list(([1,2,12,6])), otrzymasz listę taką jak [1,2,1,2,6]
PradyJord
12

Zamiast:

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

Dlaczego nie skrócić procesu:

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

Spowoduje to usunięcie duplikatów z Twojej listy i zwrócenie listy z powrotem.

tonym415
źródło
5
Nie ma różnicy między nimi. Właśnie wstawiłeś przypisania zmiennych.
7

[ZMIENIONO] Wygląda na to, że wcześniej przedefiniowałeś „listę”, używając jej jako nazwy zmiennej, na przykład:

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

I dostaniesz

Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'set' object is not callable
Rusłan Grohovetsky
źródło
5

Ilekroć utkniesz w tego typu problemach, spróbuj najpierw znaleźć typ danych elementu, który chcesz przekonwertować, używając:

type(my_set)

Następnie użyj:

  list(my_set) 

aby przekształcić go w listę. Możesz teraz używać nowo zbudowanej listy jak każdej normalnej listy w Pythonie.

Pawan Kumar
źródło
3

Wystarczy wpisać:

list(my_set)

Spowoduje to zamianę zbioru w postaci {'1', '2'} w listę w postaci ['1', '2'].

Jesse
źródło
2

Przejrzyj swoją pierwszą linię. Twój ślad stosu najwyraźniej nie pochodzi z wklejonego tutaj kodu, więc nie wiem dokładnie, co zrobiłeś.

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

To, czego chciałeś, to 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'>

Wyjątek „niemożliwy set()()do wywołania ” oznacza, że ​​robiłeś coś takiego jak - próba wywołania setinstancji.

Chris Morgan
źródło
0

Nie jestem pewien, czy tworzysz zestaw z taką ([1, 2])składnią, a raczej listę. Aby stworzyć zestaw, powinieneś użyć set([1, 2]).

Te nawiasy po prostu otaczają wyrażenie, tak jakbyś napisał:

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

Tak naprawdę nie są ignorowane, ale nie rób nic ze swoim wyrazem twarzy.

Uwaga: (something, something_else)utworzy krotkę (ale nadal nie ma listy).

Joël
źródło
@gath twoja edycja wydaje mi się w porządku, przynajmniej pierwszy blok. Czy nadal masz błąd? Czy możesz spróbować tego w nowym wierszu poleceń? Co otrzymujesz po prostu pisząc set?
Joël
0

Python jest językiem z typami dynamicznymi, co oznacza, że ​​nie możesz zdefiniować typu zmiennej, tak jak w C lub C ++:

type variable = value

lub

type variable(value)

W Pythonie używasz koercji, jeśli zmieniasz typy, lub funkcji inicjujących (konstruktorów) typów, aby zadeklarować zmienną typu:

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

da tobie <type 'set'> odpowiedź.

Jeśli masz listę, zrób to:

my_list = [1,2,3]
my_set = set(my_list)
tmaric
źródło
-1

Hmmm założę się, że w niektórych poprzednich liniach masz coś takiego:

list = set(something)

Czy się mylę ?

Jeannot
źródło
Jak wspomniano powyżej w jednej z odpowiedzi, również masz takie samo założenie. W głównym kodzie pytanie było prawdopodobnie ustawione listna równe tworzenie zbioru set(values). I to powodowało zamieszanie. Twoja odpowiedź nie powinna być odrzucona. Ale też nie wkurza czytelników :) Po prostu przeglądamy i widzimy złą opinię.
Vladimir Vukanac