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

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

John La Rooy
quelle
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)
Zhang Yiwei
quelle
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.

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

Ihr Code funktioniert mit Python 3.2.1 unter Win7 x64

a = set(["Blah", "Hello"])
a = list(a)
type(a)
<class 'list'>
Wendal Chen
quelle
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']) )
IgobyE
quelle