Python'da liste öğelerinden bir küme nasıl oluşturulur?


170

listPython'da bir dosya isimlerim var ve tüm dosya isimlerinden bir tane oluşturmak istiyorum set.

filelist=[]
for filename in filelist:
    set(filename)

Bu işe yaramıyor gibi görünüyor. Bunu nasıl yapabilirim?

Yanıtlar:


322

Yıkanabilir nesnelerin bir listeniz varsa (dosya adları muhtemelen dizeler olacaktır, bu nedenle sayılmalıdır):

lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]

seti doğrudan oluşturabilirsiniz:

s = set(lst)

Aslında, herhangi bir yinelenebilir nesneset ile bu şekilde çalışacaktır ! (Ördek yazmak iyi değil mi?)


Tekrarlı olarak yapmak istiyorsanız:

s = set()
for item in iterable:
    s.add(item)

Ancak nadiren bu şekilde yapılması gerekir. Sadece bahsettiğim için set.addyöntem oldukça faydalı.


1
2.7 kullanıyorum ve bu işe yaramıyor gibi görünüyor. Burada neler oluyor? Python 2.7.13 (varsayılan, 24 Tem 2017, 14:22:59) [GCC 4.2.1 Uyumlu Apple LLVM 8.1.0 (clang-802.0.42)] darwin'de "yardım", "telif hakkı", "kredi" yazın veya daha fazla bilgi için "lisans". >>> x = [1,2,3] >>> set (x) set ([1, 2, 3]) >>>
opus111

@ user1902291-- Görünüşe göre işe yaradı, sadece sonuç kümesini takip etmek istiyorsun:y = set(x)
mgilson

Ayrıca, listeden kümeye öğe eklemenin, yinelenenleri listeden filtrelemek istediğinizde çok yararlı olabileceğini unutmayın.
Pranjal Kumar

12

En doğrudan çözüm şudur:

 s = set(filelist)

Orijinal kodunuzdaki sorun, değerlerin kümeye atanmamış olmasıdır . Kodunuzun düzeltilmiş sürümü:

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)

9

Yapabilirsin

my_set = set(my_list)

veya Python 3 için,

my_set = {*my_list}

listeden bir küme oluşturmak için. Tersine, ayrıca

my_list = list(my_set)

veya Python 3 için,

my_list = [*my_set]

kümeden bir liste oluşturmak için.

Listedeki öğelerin sırasının, bir kümenin doğası gereği sıralı olmadığı için liste bir kümeye dönüştürülürken genellikle kaybolduğunu unutmayın. (CPython'daki bir istisna, liste yalnızca negatif olmayan tamsayılardan oluşuyor gibi görünüyor, ancak bunun CPython'daki kümelerin uygulanmasının bir sonucu olduğunu ve bu davranışın farklı Python uygulamaları arasında değişebileceğini varsayıyorum.)


4

İşte başka bir çözüm:

>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])

Bu kodda bir kümeye dönüştürmek için set yöntemini kullandım ve sonra tüm yinelenen değerleri listeden kaldırdı


1

Kümeyi yinelemeli şekilde oluşturmanın genel bir yolu:

aset = {e for e in alist}

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.