Wie konvertiere ich ein Set in eine Liste in Python?


143

Ich versuche, einen Satz in Python 2.6 in eine Liste zu konvertieren. Ich benutze diese Syntax:

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

Ich erhalte jedoch die folgende Stapelverfolgung:

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

Wie kann ich das beheben?


2
Funktioniert für mich unter Python 2.6.6 unter Linux ... aber diese erste Zeile erstellt keine Menge.
Detly

2
Nach TypeError: 'set' object is not callable: Was ist set? Danke
essen

13
Sie haben das eingebaute Set beschattet. Vielleicht hast du versehentlich getippt set=set(first_list)oder so. Jetzt setwird für dieses festgelegte Objekt neu definiert, was diesen Fehler verursachen würde. Versuchen Sie es erneut mit einem frischen Python-Interpreter
John La Rooy

3
@gnibbler: du solltest das als Antwort setzen, da es eindeutig das war, was es kaputt gemacht hat.
Chris Morgan

2
Es ist schade, dass die Frage bearbeitet wurde, um das Problem zu beheben. Es ist verwirrend, den richtigen Code zu sehen, gefolgt von einem Fehler, der nicht generiert wird. Tatsächlich verursacht die ursprüngliche Frage vor den Änderungen auch nicht den angezeigten Fehler. Ich vermute, dass dies ein Fehler beim Kopieren und Einfügen ist.
LS

Antworten:


194

Es ist bereits eine Liste

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

Willst du so etwas wie

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

BEARBEITEN: Ausgabe Ihres letzten Kommentars

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

Ich frage mich, ob Sie so etwas getan haben:

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

4
Wenn ich (my_set) tippe, bekomme ich <type 'set'>
gath

2
@gath, das war, bevor Sie den Code bearbeitet haben. Ihr aktueller Code funktioniert auf meinem Computer einwandfrei. Können Sie versuchen, das Einfügen in einen Python-Interpreter zu kopieren und die Ausgabe hier
Benutzer

1
Versuchen Sie Folgendes: >>> my_list = [1,2,3,4] >>> my_set = set (my_list) >>> my_new_list = list (my_set) Traceback (letzter Aufruf zuletzt): Datei "<console>", Zeile 1 in <Modul> TypeError: Das Objekt 'set' kann nicht aufgerufen werden
gath

1
Ich wette, er hat versehentlich den Namen 'set' an {1,2,3} oder [1,2,3] oder so gebunden. (Weil ich es versehentlich beim Experimentieren
getan habe

1
Das Konvertieren einer Ganzzahlliste mit dieser Methode ist nicht zuverlässig: Wenn Ihr Satz ist ([1,2,12,6])und Sie dies tun, erhalten list(([1,2,12,6]))Sie eine Liste wie [1,2,1,2,6]
PradyJord

12

Anstatt:

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

Warum nicht den Prozess abkürzen:

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

Dadurch werden die Dupes aus Ihrer Liste entfernt und eine Liste an Sie zurückgegeben.


5
Es gibt keinen Unterschied zwischen beiden. Sie haben gerade die Variablenzuweisungen eingefügt.

7

[BEARBEITET] Es scheint, dass Sie "Liste" früher neu definiert und als Variablennamen verwendet haben, wie folgt:

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

Und du wirst bekommen

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

5

Wenn Sie in solchen Problemen stecken, versuchen Sie, den Datentyp des Elements zu finden, das Sie zuerst konvertieren möchten, indem Sie Folgendes verwenden:

type(my_set)

Dann benutze:

  list(my_set) 

um es in eine Liste umzuwandeln. Sie können die neu erstellte Liste jetzt wie jede normale Liste in Python verwenden.


3

Geben Sie einfach Folgendes ein:

list(my_set)

Dadurch wird eine Menge in der Form {'1', '2'} in eine Liste in der Form ['1', '2'] umgewandelt.


2

Überprüfen Sie Ihre erste Zeile. Ihre Stapelverfolgung stammt eindeutig nicht aus dem Code, den Sie hier eingefügt haben, daher weiß ich nicht genau, was Sie getan haben.

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

Was du wolltest war 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'>

Die Ausnahme "nicht aufrufbar" bedeutet, dass Sie set()()versucht haben, eine setInstanz aufzurufen .


0

Ich bin mir nicht sicher, ob Sie ein Set mit dieser ([1, 2])Syntax erstellen , sondern eine Liste. Um ein Set zu erstellen, sollten Sie verwenden set([1, 2]).

Diese Klammern umhüllen nur Ihren Ausdruck, als hätten Sie geschrieben:

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

Es werden nicht wirklich ignoriert, aber tun Sie nichts mit Ihrem Ausdruck.

Hinweis: (something, something_else)Erstellt ein Tupel (aber immer noch keine Liste).


@gath deine Bearbeitung scheint mir in Ordnung zu sein, zumindest der erste Block. Haben Sie immer noch den Fehler? Können Sie dies in einer neuen Befehlszeile versuchen? Was bekommen Sie, wenn Sie nur tippen set?
Joël

0

Python ist eine dynamisch typisierte Sprache. Dies bedeutet, dass Sie den Typ der Variablen nicht wie in C oder C ++ definieren können:

type variable = value

oder

type variable(value)

In Python verwenden Sie das Erzwingen, wenn Sie Typen ändern, oder die Init-Funktionen (Konstruktoren) der Typen, um eine Variable eines Typs zu deklarieren:

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

werde dir geben <type 'set'> eine Antwort geben.

Wenn Sie eine Liste haben, gehen Sie folgendermaßen vor:

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

-1

Hmmm, ich wette, dass Sie in einigen vorherigen Zeilen so etwas wie:

list = set(something)

Liege ich falsch ?


Wie oben in einer Antwort erwähnt, haben Sie auch die gleiche Annahme. Im Hauptcode der Frage wurde wahrscheinlich listgleichgesetzt, um Satz zu erstellen set(values). Und es machte Verwirrung. Ihre Antwort sollte nicht abgelehnt werden. Aber es hakt auch nicht die Leser :) Wir überfliegen nur und sehen, dass etwas falsch ist.
Vladimir Vukanac
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.