Python auf Liste gesetzt


159

Wie kann ich einen Satz in Python in eine Liste konvertieren? Verwenden von

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

funktioniert nicht Es gibt mir:

TypeError: 'set' object is not callable
python  list  set 

6
Das obige funktioniert für mich unter Python 2.7.
Aukaost

20
Wenn Sie eine andere Variable in Ihrem Code benannt haben, setändern Sie diese, weil Sie die integrierte Funktion überschatten set.
Mouad

5
@mouad Nein, die Zeichenfolge in Klammern in a TypeErrorist der Name des Typs , nicht der Variablenname
Phihag

7
@ Richter John Deed: Du hast list = some_setirgendwo gemacht. Fügen print listSie hinzu, bevor Sie es aufrufen.
Jochen Ritzel

6
Ich bin auf dieses Problem beim Debuggen in PDB gestoßen, wo 'list' als PDB-Befehl überschrieben wird.
WP McNeill

Antworten:


242

Ihr Code funktioniert (getestet mit cpython 2.4, 2.5, 2.6, 2.7, 3.1 und 3.2):

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

Stellen Sie sicher, dass Sie nicht versehentlich überschrieben haben list:

>>> assert list == __builtins__.list

2
Ich habe gerade diesen genauen Code in IDLE kopiert und eingefügt. Ich bekomme den Fehler.

Können Sie die Ausgabe von dir(set)und bereitstellen print set?
Susam Pal

['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'](__ wegen

@Judge John Deed In welcher Zeile erhalten Sie den Fehler? Du setsiehst gut aus.
Phihag

Versuchen Sie Set statt Set: REF: docs.python.org/2/library/sets.html
Gonzalo

72

Sie haben den integrierten Satz beschattet, indem Sie ihn versehentlich als Variablennamen verwendet haben. Hier ist eine einfache Möglichkeit, Ihren Fehler zu replizieren

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

Die erste Zeile bindet set wieder an eine Instanz von set. Die zweite Zeile versucht, die Instanz aufzurufen, was natürlich fehlschlägt.

Hier ist eine weniger verwirrende Version, die unterschiedliche Namen für jede Variable verwendet. Mit einem frischen Dolmetscher

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

Hoffentlich ist es offensichtlich, dass das Aufrufen aein Fehler ist


25

Bevor Sie schreiben set(XXXXX) , haben Sie "set" als Variable verwendet, z

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


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

15

Das wird funktionieren:

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

Wenn Sie jedoch "list" oder "set" als Variablennamen verwendet haben, erhalten Sie Folgendes:

TypeError: 'set' object is not callable

z.B:

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

Der gleiche Fehler tritt auf, wenn Sie "Liste" als Variablennamen verwendet haben.



4

Ihr Code funktioniert mit Python 3.2.1 unter Win7 x64

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

2

Versuchen Sie es mit einer Kombination aus Karten- und Lambda-Funktionen:

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

Es ist sehr praktisch, wenn Sie eine Reihe von Zahlen in einer Zeichenfolge haben und diese in eine Liste von Ganzzahlen konvertieren möchten:

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
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.