Python impostato su elenco


159

Come posso convertire un set in un elenco in Python? utilizzando

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

non funziona Mi dà:

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

6
Quanto sopra funziona per me su Python 2.7.
aukaost,

20
se hai chiamato un'altra variabile nel tuo codice, setmodificala perché stai oscurando la funzione integrata set.
mouad,

5
@mouad No, la stringa tra parentesi in a TypeErrorè il nome del tipo , non il nome della variabile
phihag

7
@Judge John Deed: hai fatto list = some_setda qualche parte. Aggiungi print listprima di chiamarlo.
Jochen Ritzel,

6
Ho riscontrato questo problema durante il debug in PDB in cui 'list' viene sovrascritto come comando PDB.
WP McNeill,

Risposte:


242

Il tuo codice fa il lavoro (testato con CPython 2.4, 2.5, 2.6, 2.7, 3.1 e 3.2):

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

Verifica di non aver sovrascritto listper errore:

>>> assert list == __builtins__.list

2
Ho appena copiato e incollato questo codice esatto in IDLE; Ottengo l'errore.

Potete fornire l'output di dir(set)e 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'](rimosso __ a causa del limite di caratteri)

@Judge John Deed A quale riga viene visualizzato l'errore? Il tuo setaspetto va bene.
phihag,

prova Set invece di set: REF: docs.python.org/2/library/sets.html
Gonzalo

72

Hai oscurato il set incorporato usando accidentalmente come nome di variabile, ecco un modo semplice per replicare il tuo errore

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

La prima riga si ricollega a un'istanza di set. La seconda linea sta provando a chiamare l'istanza che ovviamente fallisce.

Ecco una versione meno confusa che usa nomi diversi per ogni variabile. Utilizzando un nuovo interprete

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

Spero sia ovvio che chiamare asia un errore


25

prima di scrivere set(XXXXX) hai usato "set" come variabile ad es

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


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

15

Questo funzionerà:

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

Tuttavia, se hai usato "list" o "set" come nome di una variabile otterrai:

TypeError: 'set' object is not callable

per esempio:

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

Lo stesso errore si verificherà se hai usato "list" come nome di variabile.


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

4

Il codice funziona con Python 3.2.1 su Win7 x64

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

2

Prova a usare la combinazione delle funzioni map e lambda:

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

È un approccio molto conveniente se si dispone di un set di numeri in stringa e si desidera convertirlo in un elenco di numeri interi:

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.