Bir seti python'daki bir listeye nasıl dönüştürebilirim?


145

Bir seti Python 2.6 bir listeye dönüştürmek çalışıyorum. Bu sözdizimini kullanıyorum:

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

Ancak, aşağıdaki yığın izleme olsun:

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

Bunu nasıl düzeltebilirim?


2
Benim için Linux'ta Python 2.6.6'da çalışıyor ... ama bu ilk satır bir set oluşturmuyor.
detly

2
Göre TypeError: 'set' object is not callable: Nedir set? Teşekkürler
yemek

13
Set yerleşimini gölgeledin. Belki de yanlışlıkla yazdınız set=set(first_list)veya başka bir şey. Şimdi setbu hataya neden olacak bu set nesnesine yeniden tanımlandı. Taze Python yorumlayıcısı ile tekrar deneyin
John La Rooy

3
@gnibbler: Bunu bir cevap olarak koymalısın, çünkü kırılan şey budur.
Chris Morgan

2
Sorunun düzeltilmesi için sorunun düzenlenmesi çok kötü. Doğru kodu ve ardından üretmeyecek bir hatayı görmek kafa karıştırıcıdır. Aslında, düzenlemelerden önceki orijinal soru da gösterilen hataya neden olmaz. Bunun bir kopyalama ve yapıştırma hatası olduğundan şüpheleniyorum.
LS

Yanıtlar:


195

Zaten bir liste

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

Gibi bir şey ister misin

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

EDIT: Son yorumunuzun çıktısı

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

Böyle bir şey yapıp yapmadığınızı merak ediyorum:

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

4
(My_set) yazdığımda <type 'set'> alıyorum
gath

2
@gath, kodu düzenlemeden önceydi. Geçerli kodunuz makinemde iyi çalışıyor. Bunu bir python yorumlayıcısına yapıştırarak kopyalamayı deneyebilir ve çıktıyı buraya yapıştırabilirsiniz
kullanıcı

1
şunu deneyin: >>> my_list = [1,2,3,4] >>> my_set = set (my_list) >>> my_new_list = list (my_set) Geri izleme (en son çağrı son): "<console>" dosyası, satır 1 '<modül> TypeError: 'set' nesne çağrılabilir değil
gath

1
Bahse girerim, yanlışlıkla 'set' adını {1,2,3} veya [1,2,3] veya bunun gibi bir şeye bağlar. (Çünkü deneme yaparken yanlışlıkla yaptım)
user3556757

1
Bu yöntemi kullanarak bir tamsayı listesini dönüştürmek güvenilir değildir: Eğer ([1,2,12,6])list(([1,2,12,6]))[1,2,1,2,6]
kümeniz

12

Onun yerine:

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

İşlemi neden kısaltmıyorsunuz?

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

Bu, kopyaları listenizden kaldıracak ve bir listeyi size geri verecektir.


5
İkisi arasında fark yoktur. Değişken atamalarını yeni çizdiniz.

7

[EDITED] Görünüşe göre, daha önce bu tür bir değişken adı olarak kullanarak "list" i yeniden tanımladınız:

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

Ve alacaksın

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

5

Bu tür sorunlarla karşılaştığınızda, önce dönüştürmek istediğiniz öğenin veri türünü kullanarak şunu deneyin:

type(my_set)

Sonra kullan:

  list(my_set) 

bir listeye dönüştürmek için. Yeni oluşturulan listeyi artık python'daki herhangi bir normal liste gibi kullanabilirsiniz.


3

Basitçe şunu yazın:

list(my_set)

Bu, {'1', '2'} biçimindeki bir kümeyi ['1', '2'] biçimindeki bir listeye dönüştürür.


2

İlk satırınızı gözden geçirin. Yığın iziniz açıkça buraya yapıştırdığınız koddan değil, bu yüzden ne yaptığınızı tam olarak bilmiyorum.

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

İstediğin şey buydu 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'>

"Çağrılabilir değil" istisnası, set()()bir setörneği çağırmaya çalışmak gibi bir şey yaptığınız anlamına gelir .


0

Bu ([1, 2])sözdizimiyle bir dizi oluşturduğunuzdan emin değilim , bir liste. Bir küme oluşturmak için şunu kullanmalısınız set([1, 2]).

Bu parantezler sanki yazmışsınız gibi ifadenizi sarar:

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

Gerçekten göz ardı edilmez, ancak ifadenize hiçbir şey yapmayın.

Not: (something, something_else)bir demet oluşturur (ancak yine de liste yok).


@gath düzenlemen benim için iyi görünüyor, en azından ilk blok. Hala hatayla mı karşılaşıyorsunuz? Bunu yeni bir komut satırında deneyebilir misiniz? Sadece yazarken ne elde edersiniz set?
Joël

0

Python dinamik olarak yazılan bir dildir, yani C veya C ++ 'da yaptığınız gibi değişkenin türünü tanımlayamazsınız:

type variable = value

veya

type variable(value)

Python'da, türleri değiştirirseniz zorlama kullanırsınız veya türün bir değişkenini bildirmek için türlerin init işlevlerini (yapıcıları) kullanırsınız:

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

size <type 'set'>bir cevap verecek.

Listeniz varsa, bunu yapın:

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

-1

Hmmm Bahse girerim bazı önceki satırlarda şöyle bir şey var:

list = set(something)

Yanlış mıyım ?


Yukarıda bir cevapta belirtildiği gibi, aynı varsayım da vardır. Ana soru kodu muhtemelen set listoluşturma eşit olacak şekilde ayarlanmıştır set(values). Ve kafa karıştırıyordu. Yanıtınız reddedilmemelidir. Ama aynı zamanda te okuyucular kanca değil :) Biz sadece gözden kaçırmak ve yanlış bir şey downvote görüyoruz.
Vladimir Vukanac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.