Python listeye ayarlandı


159

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

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

çalışmıyor. Bana verir:

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

6
Yukarıdakiler benim için Python 2.7'de çalışıyor.
aukaost

20
kodunuzda başka bir değişken adlandırdıysanız set, yerleşik işlevi gölgelediğiniz için bunu değiştirin set.
mouad

5
@mouad Hayır, bir de parantez içinde dize TypeErroradıdır türü değil, değişken adı
phihag

7
@Judge John Deed: Bir list = some_setyerde yaptın . print listAramadan önce ekleyin .
Jochen Ritzel

6
Ben 'liste' bir PDB komutu olarak geçersiz kılınan PDB hata ayıklama sırasında bu sorunu vurdu.
WP McNeill

Yanıtlar:


242

İşletme kod yapar çalışma (CPython 2.4, 2.5, 2.6, 2.7, 3.1 ve 3.2 ile test edilmiştir):

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

listYanlışlıkla üzerine yazmadığınızdan emin olun :

>>> assert list == __builtins__.list

2
Ben sadece kopyaladı ve IDLE bu tam kodu yapıştırdı; Hatayı alıyorum.

Eğer çıktısını verebilir dir(set)ve 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'](char sınırı nedeniyle __ kaldırıldı)

@Judge John Deed Hatayı hangi satırda alıyorsunuz? Kişisel setgörünüm iyi.
phihag

set yerine Set'i deneyin: REF: docs.python.org/2/library/sets.html
Gonzalo

72

Yerleşik kümesi yanlışlıkla değişken adı olarak kullanarak gölgelendirdiniz, işte hatayı çoğaltmanın basit bir yolu

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

İlk satır, bir küme örneğine ayarlanmış olarak hatırlatılır . İkinci satır, elbette başarısız olan örneği çağırmaya çalışıyor .

Her değişken için farklı adlar kullanan daha az kafa karıştırıcı bir versiyon. Yeni bir tercüman kullanma

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

İnşallah aramanın abir hata olduğu açıktır


25

yazmadan önce set(XXXXX) değişken olarak "set" i kullandınız.

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


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

15

Bu çalışacak:

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

Ancak, değişken listesi olarak "list" veya "set" komutlarını kullandıysanız:

TypeError: 'set' object is not callable

Örneğin:

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

Değişken adı olarak "list" i kullandıysanız aynı hata oluşur.



4

Kodunuz Win7 x64'te Python 3.2.1 ile çalışır

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

2

Harita ve lambda işlevlerinin birleşimini kullanmayı deneyin:

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

Dizede bir sayı kümeniz varsa ve bunu tamsayı listesine dönüştürmek istiyorsanız çok uygun bir yaklaşımdır:

aList = map( lambda x: int(x), set (['1', '2', '3', '7', '12']) )
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.