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
python  list  set 

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

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


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)

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.



4

Kode Anda berfungsi dengan Python 3.2.1 pada Win7 x64

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

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']) )
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.