Python diatur ke daftar

159

Bagaimana saya bisa mengonversi satu set ke daftar dengan Python? Menggunakan

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

tidak bekerja Ini memberi saya:

TypeError: 'set' object is not callable

sumber
6
Di atas berfungsi untuk saya di Python 2.7.
aukaost
20
jika Anda menamai variabel lain dalam kode Anda, setubahlah karena Anda membayangi fungsi builtin set.
mouad
5
@mouad Tidak, string dalam tanda kurung di dalam TypeErroradalah nama dari tipe , bukan nama variabel
phihag
7
@ Judge John Deed: Anda melakukannya di list = some_setsuatu tempat. Tambahkan print listsebelum Anda menyebutnya.
Jochen Ritzel
6
Saya mengalami masalah ini saat debugging di PDB di mana 'daftar' diganti sebagai perintah PDB.
WP McNeill

Jawaban:

242

Kode Anda berfungsi (diuji dengan cpython 2.4, 2.5, 2.6, 2.7, 3.1 dan 3.2):

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

Pastikan Anda tidak menimpa listsecara tidak sengaja:

>>> assert list == __builtins__.list
phihag
sumber
2
Saya baru saja menyalin dan menempelkan kode persis ini di IDLE; Saya mendapatkan kesalahan.
Bisakah Anda memberikan output dari dir(set)dan 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'](dihapus __ karena batas char)
@ Judge John Deed Di jalur mana Anda mendapatkan kesalahan? Kamu setterlihat baik-baik saja.
phihag
coba Tetapkan alih-alih set: REF: docs.python.org/2/library/sets.html
Gonzalo
72

Anda telah membayangi bawaan yang ditetapkan dengan tidak sengaja menggunakannya sebagai nama variabel, berikut adalah cara sederhana untuk mereplikasi kesalahan Anda

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

Baris pertama rebind diatur ke instance dari set. Baris kedua sedang mencoba untuk memanggil instance yang tentu saja gagal.

Ini adalah versi yang kurang membingungkan menggunakan nama yang berbeda untuk setiap variabel. Menggunakan penerjemah baru

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

Semoga jelas bahwa panggilan aadalah kesalahan

John La Rooy
sumber
25

sebelum Anda menulis, set(XXXXX) Anda telah menggunakan "set" sebagai variabel mis

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


a = set(["Blah", "Hello"])
a = list(a)
Zhang Yiwei
sumber
15

Ini akan berhasil:

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

Namun, jika Anda telah menggunakan "daftar" atau "set" sebagai nama variabel, Anda akan mendapatkan:

TypeError: 'set' object is not callable

misalnya:

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

Kesalahan yang sama akan terjadi jika Anda menggunakan "daftar" sebagai nama variabel.

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

Kode Anda berfungsi dengan Python 3.2.1 pada Win7 x64

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

Coba gunakan kombinasi fungsi peta dan lambda:

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

Ini adalah pendekatan yang sangat nyaman jika Anda memiliki serangkaian angka dalam string dan Anda ingin mengubahnya menjadi daftar bilangan bulat:

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
IgobyE
sumber