Bagaimana cara mengubah set ke daftar dengan python?

144

Saya mencoba mengonversi kumpulan ke daftar di Python 2.6. Saya menggunakan sintaks ini:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

Namun, saya mendapatkan jejak tumpukan berikut:

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

Bagaimana saya bisa memperbaikinya?

Gat
sumber
2
Bekerja untuk saya di Python 2.6.6 di Linux ... tapi baris pertama itu tidak membuat set.
detly
2
Menurut TypeError: 'set' object is not callable: Apa itu set? Terima kasih
makan
13
Anda telah membayangi perangkat bawaan. Mungkin Anda tidak sengaja mengetik set=set(first_list)atau sesuatu. Sekarang setdidefinisikan ulang ke objek set ini yang akan menyebabkan kesalahan itu. Coba lagi dengan juru bahasa Python baru
John La Rooy
3
@gnibbler: Anda harus meletakkan itu sebagai jawaban, karena itulah yang memecahkannya.
Chris Morgan
2
Sayang sekali pertanyaannya telah diedit untuk memperbaiki masalah. Sangat membingungkan melihat kode yang benar diikuti oleh kesalahan yang tidak akan dihasilkannya. Bahkan, pertanyaan awal sebelum diedit juga tidak menyebabkan kesalahan. Saya menduga ini adalah kesalahan salin dan tempel.
LS

Jawaban:

195

Sudah daftar

type(my_set)
>>> <type 'list'>

Apakah Anda menginginkan sesuatu seperti

my_set = set([1,2,3,4])
my_list = list(my_set)
print my_list
>> [1, 2, 3, 4]

EDIT: Output dari komentar terakhir Anda

>>> my_list = [1,2,3,4]
>>> my_set = set(my_list)
>>> my_new_list = list(my_set)
>>> print my_new_list
[1, 2, 3, 4]

Saya ingin tahu apakah Anda melakukan sesuatu seperti ini:

>>> set=set()
>>> set([1,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable
pengguna
sumber
4
Ketika saya mengetik (my_set) saya mendapatkan <type 'set'>
gath
2
@ ghath, itu sebelum Anda mengedit kode. Kode Anda saat ini berfungsi dengan baik di mesin saya. Bisakah Anda mencoba menyalin menyisipkan itu ke dalam interpreter python seperti itu dan menempelkan hasilnya di sini
pengguna
1
coba ini: >>> my_list = [1,2,3,4] >>> my_set = set (my_list) >>> my_new_list = daftar (my_set) Traceback (panggilan terakhir terakhir): File "<console>", baris 1, dalam <module> TypeError: objek 'set' tidak bisa dipanggil
gath
1
Saya yakin dia tidak sengaja mengikat nama 'set' ke {1,2,3} atau [1,2,3] atau semacamnya. (Karena saya tidak sengaja melakukan percobaan)
user3556757
1
Mengonversi daftar bilangan bulat menggunakan metode ini tidak dapat diandalkan: jika set ([1,2,12,6])Anda dan Anda melakukannya, list(([1,2,12,6]))Anda akan mendapatkan daftar seperti [1,2,1,2,6]
PradyJord
12

Dari pada:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

Mengapa tidak pintas proses:

my_list = list(set([1,2,3,4])

Ini akan menghapus dupes dari daftar Anda dan mengembalikan daftar kepada Anda.

tonym415
sumber
5
Tidak ada perbedaan di antara keduanya. Anda baru saja menggarisbawahi penugasan variabel.
7

[Diedit] Sepertinya Anda sebelumnya telah mendefinisikan ulang "daftar", menggunakannya sebagai nama variabel, seperti ini:

list = set([1,2,3,4]) # oops
#...
first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

Dan Anda akan mendapatkannya

Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'set' object is not callable
Ruslan Grohovetsky
sumber
5

Setiap kali Anda terjebak dalam jenis masalah seperti itu, cobalah untuk menemukan tipe data dari elemen yang ingin Anda konversi terlebih dahulu dengan menggunakan:

type(my_set)

Kemudian, Gunakan:

  list(my_set) 

untuk mengubahnya menjadi daftar. Anda dapat menggunakan daftar yang baru dibangun seperti daftar normal di python sekarang.

Pawan Kumar
sumber
3

Cukup ketik:

list(my_set)

Ini akan mengubah set dalam bentuk {'1', '2'} menjadi daftar dalam bentuk ['1', '2'].

Jesse
sumber
2

Tinjau baris pertama Anda. Jejak tumpukan Anda jelas bukan dari kode yang Anda tempelkan di sini, jadi saya tidak tahu persis apa yang telah Anda lakukan.

>>> my_set=([1,2,3,4])
>>> my_set
[1, 2, 3, 4]
>>> type(my_set)
<type 'list'>
>>> list(my_set)
[1, 2, 3, 4]
>>> type(_)
<type 'list'>

Yang Anda inginkan adalah set([1, 2, 3, 4]).

>>> my_set = set([1, 2, 3, 4])
>>> my_set
set([1, 2, 3, 4])
>>> type(my_set)
<type 'set'>
>>> list(my_set)
[1, 2, 3, 4]
>>> type(_)
<type 'list'>

Pengecualian "tidak dapat dihubungi" berarti Anda melakukan sesuatu seperti set()()- mencoba memanggil setinstance.

Chris Morgan
sumber
0

Saya tidak yakin Anda membuat set dengan ([1, 2])sintaks ini , lebih tepatnya sebuah daftar. Untuk membuat set, Anda harus menggunakanset([1, 2]) .

Kurung ini hanya membungkus ekspresi Anda, seolah-olah Anda akan menulis:

if (condition1
    and condition2 == 3):
    print something

Tidak ada yang benar-benar diabaikan, tetapi jangan lakukan apa pun untuk ekspresi Anda.

Catatan: (something, something_else)akan membuat tuple (tapi masih belum ada daftar).

Joël
sumber
@gath hasil edit Anda tampaknya baik-baik saja bagi saya, setidaknya blok pertama. Apakah Anda masih mengalami kesalahan? Bisakah Anda mencoba ini di baris perintah baru? Apa yang Anda dapatkan saat mengetik saja set?
Joël
0

Python adalah bahasa yang diketik secara dinamis, yang berarti Anda tidak dapat menentukan jenis variabel seperti yang Anda lakukan dalam C atau C ++:

type variable = value

atau

type variable(value)

Dalam Python, Anda menggunakan paksaan jika Anda mengubah tipe, atau fungsi init (konstruktor) dari tipe untuk mendeklarasikan variabel tipe:

my_set = set([1,2,3])
type my_set

akan memberi Anda <type 'set'>jawaban.

Jika Anda memiliki daftar, lakukan ini:

my_list = [1,2,3]
my_set = set(my_list)
Tomaric
sumber
-1

Hmmm saya bertaruh bahwa di beberapa baris sebelumnya Anda memiliki sesuatu seperti:

list = set(something)

Apakah aku salah ?

Jeannot
sumber
Seperti disebutkan di atas dalam satu jawaban, Anda juga memiliki asumsi yang sama. Dalam kode pertanyaan utama mungkin diatur listsama dengan membuat set set(values). Dan itu membuat kebingungan. Jawaban Anda tidak boleh diturunkan. Tapi juga itu tidak mengaitkan pembaca te :) Kami hanya membaca sekilas dan melihat hal yang salah downvote.
Vladimir Vukanac