Python Listelerinden Yinelenen Öğeleri Kaldırmanın 5 Yöntemi

Yayınlanan: 2022-07-05

Bu öğreticide, yinelenen öğeleri Python listelerinden nasıl kaldıracağınızı öğreneceksiniz.

Python'da listelerle çalışırken, kopyaları kaldırarak bazen listedeki yalnızca benzersiz öğelerle çalışmanız gerekebilir.

Bunu yapmanın birkaç farklı yolu vardır. Bu derste, bu tür beş tekniğin üzerinden geçeceğiz.

Python Listelerinin Temelleri

Python listelerinin temellerini gözden geçirerek tartışmamıza başlayalım.

Python listeleri değişkendir. Böylece listeden öğeler ekleyip çıkararak bunları yerinde değiştirebilirsiniz. Ek olarak, Python listeleri, benzersiz olması gerekmeyen öğelerin koleksiyonlarıdır.

Peki, yalnızca benzersiz öğeleri nasıl korur ve yinelenen veya yinelenen öğeleri nasıl kaldırırsınız ?

Peki, bunu birkaç farklı şekilde yapabilirsiniz. Yalnızca orijinal listedeki benzersiz öğeleri içeren yeni bir liste oluşturabilirsiniz. Veya orijinal listeyi yerinde değiştirmeyi ve yinelenen öğeleri kaldırmayı seçebilirsiniz.

Bunları bu eğitimde ayrıntılı olarak öğreneceğiz.

Python Listelerinden Yinelenenleri Kaldırma Yöntemleri

Gerçek dünyadan bir örnek alalım. Diyelim ki arkadaşınızın doğum günü partisindesiniz.

Görüntülenen tatlı koleksiyonunda, tekrarlanan bazı öğeler olduğunu görüyorsunuz. Şimdi bu yinelenen öğeleri tatlılar listesinden çıkarmak istiyorsunuz.

listeden-kopyala-çıkar

Yukarıdaki resimdeki tüm öğeleri içeren bir sweets listesi oluşturalım.

 sweets = ["cupcake","candy","lollipop","cake","lollipop","cheesecake","candy","cupcake"]

Yukarıdaki sweets listesinde, 'şekerleme' ve 'çörek' öğeleri iki kez tekrarlanır. Yinelenen öğeleri kaldırmak için bu örnek listeyi kullanalım.

Yinelenenleri Kaldırmak için Python Listeleri Üzerinde Yineleme

En basit yöntem, her öğeyi tam olarak bir kez içeren yeni bir liste oluşturmaktır.

Aşağıdaki kod hücresini okuyun:

 unique_sweets = [] for sweet in sweets: if sweet not in unique_sweets: unique_sweets.append(sweet) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']
  • unique_sweets boş bir liste başlatıyoruz.
  • sweets list dolaşırken her bir sweet erişiyoruz.
  • unique_sweets listesinde henüz sweet yoksa, bunu .append() yöntemini kullanarak unique_sweets listesinin sonuna ekleriz.

Diyelim ki yinelenen bir öğeyle karşılaştınız, örneğin, sweets listesinde ikinci kez 'şekerleme'. Bu, zaten mevcut olduğu için unique_sweets listesine eklenmez: sweet not in unique_sweets , 'cupcake' ve 'candy'nin ikinci oluşumu için False olarak değerlendirilir.

Bu nedenle, bu yöntemde, her öğe unique_sweets listesinde tam olarak bir kez bulunur - herhangi bir tekrar olmadan.

Yinelenenleri Kaldırmak için Liste Anlamayı Kullanın

unique_sweets listesini doldurmak için liste kavrayışını da kullanabilirsiniz.

Liste anlamanın temellerini yenilemek ister misiniz?

️ Python'da liste anlama ile ilgili eğiticiye göz atın.

Yukarıdaki döngüyü kısa ve öz bir şekilde yeniden yazmak için liste anlama ifadesini kullanalım: [output for item in iterable if koşul True] .

 unique_sweets = [] [unique_sweets.append(sweet) for sweet in sweets if sweet not in unique_sweets] print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Yeni bir liste oluşturuyor olsanız bile, oluşturulan listeyi değerlerle doldurmuyorsunuz. Bunun nedeni, çıktının unique_sweets listesine yapılan .append() işlemi olmasıdır.

Python listelerinden yinelenen öğeleri kaldırmak için yerleşik liste yöntemlerini de kullanabilirsiniz; bunu bir sonraki bölümde ele alacağız.

Yinelenenleri Kaldırmak için Yerleşik Liste Yöntemlerini Kullanın

Yinelenen öğeleri kaldırmak için Python liste yöntemleri .count() ve .remove() 'u kullanabilirsiniz.

list.count(value) sözdizimi ile .count() yöntemi, list value kaç kez gerçekleştiğini döndürür. Bu nedenle, yinelenen öğelere karşılık gelen sayı 1'den büyük olacaktır.

list.remove(value) , değerin ilk oluşumunu listeden kaldırır.

Yukarıdakileri kullanarak aşağıdaki kodu elde ederiz.

 for sweet in sweets: # check if the count of sweet is > 1 (repeating item) if sweets.count(sweet) > 1: # if True, remove the first occurrence of sweet sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

.remove() yöntemi, bir değerin yalnızca ilk oluşumunu kaldırdığından, ikiden fazla oluşan öğeleri kaldırmak için kullanamazsınız.

  • Belirli bir öğe kopyalanırsa (tam olarak iki kez oluşursa), bu yöntem ilk oluşumu kaldırır.
  • Belirli bir öğe K kez tekrarlanırsa, yukarıdaki kodu çalıştırdıktan sonra K-1 tekrarları kalır.

Ama genel olarak, yineleme dediğimizde, genellikle tüm tekrarları kastederiz.

Bu durumu ele almak için, biri hariç tüm tekrarları kaldırmak için yukarıdaki döngüyü değiştirebilirsiniz. Belirli bir öğenin sayısını kontrol etmek için bir if koşullu kullanmak yerine, listedeki her öğenin sayısı 1 olana kadar tekrarları tekrar tekrar kaldırmak için bir while döngüsü çalıştırabilirsiniz.

Liste sweets artık 2 tekrar 'cupcake' ve 3 tekrar 'şeker' içeriyor.

 sweets = ["cupcake","candy","lollipop","cake","lollipop","candy","cheesecake","candy","cupcake"]

Aşağıda gösterildiği gibi tekrarları kaldırmak için bir while döngüsü kullanabilirsiniz. Şekerlemelerdeki tatlı sayısı 1'den büyük olduğu sürece while döngüsü çalışmaya devam eder. Yalnızca bir oluşum kaldığında, sweets.count(sweet) > 1 koşulu False olur ve döngü bir sonraki öğeye atlar.

 for sweet in sweets: # check if the count of sweet is > 1 (repeating item) while(sweets.count(sweet) > 1): # repeatedly remove the first occurrence of sweet until one occurrence remains. sweets.remove(sweet) print(sweets) # Output ['cake', 'lollipop', 'cheesecake', 'candy', 'cupcake']

Ancak iç içe döngüler kullanmak çok verimli olmayabilir, bu nedenle büyük listelerle çalışıyorsanız tartışılan diğer tekniklerden birini kullanmayı düşünebilirsiniz.

Şimdiye kadar şunları öğrendik:

  • Yalnızca benzersiz öğeler içeren yeni listeler oluşturarak Python listelerinden yinelenen öğeleri kaldırma yöntemleri
  • Listeyi yerinde değiştirmek için yerleşik liste yöntemleri .count() ve .remove()

Değerlerin tamamen benzersiz olmasını gerektiren bazı Python yerleşik veri yapıları vardır - tekrarlama olmadan. Bu nedenle, yinelenenleri kaldırmak için bu veri yapılarından birine bir Python listesi gönderebiliriz. Ve sonra onları tekrar bir listeye dönüştürün. Bunu nasıl yapacağımızı ilerleyen bölümlerde öğreneceğiz.

Yinelenenleri Kaldırmak için Python Listesini Bir Kümeye Dökün

Python kümeleri, tümü benzersiz olan öğelerin koleksiyonlarıdır. Bu nedenle, kümede bulunan öğelerin sayısı ( len(<set-obj> tarafından verilir) mevcut benzersiz öğelerin sayısına eşittir.

Yinelenebilir herhangi bir Python'u, sözdizimini kullanarak bir kümeye dönüştürebilirsiniz: set(iterable) .

Şimdi liste şekerlerini bir set haline getirelim ve çıktısını inceleyelim.

 set(sweets) # Output {'cake', 'candy', 'cheesecake', 'cupcake', 'lollipop'}

Yukarıdaki kod hücresindeki çıktıdan, her öğenin tam olarak bir kez göründüğünü ve kopyaların kaldırıldığını görüyoruz.

Ayrıca, öğelerin sırasının, orijinal liste şekerlemelerindeki sıralarıyla mutlaka aynı olmadığına dikkat edin. Bunun nedeni, benzersiz öğelerden oluşan bir koleksiyon olmasının yanı sıra, bir Python küme nesnesinin sırasız bir koleksiyon olmasıdır.

Artık listeyi bir kümeye çevirerek kopyaları kaldırdığımıza göre, aşağıda gösterildiği gibi tekrar bir listeye dönüştürebiliriz.

 unique_sweets = list(set(sweets)) print(unique_sweets) # Output ['cake', 'cheesecake', 'candy', 'cupcake', 'lollipop']

Yinelenenleri Kaldırmak için Liste Öğelerini Sözlük Anahtarları Olarak Kullanın

Python sözlüğü, anahtarların değerleri benzersiz bir şekilde tanımladığı bir anahtar-değer çiftleri koleksiyonudur.

.fromkeys() yöntemini kullanarak şu sözdizimiyle bir Python sözlüğü oluşturabilirsiniz: dict.fromkeys(keys, values) . Burada keys ve values , sırasıyla sözlüğün anahtarlarını ve değerlerini içeren yinelenebilirlerdir.

  • keys gerekli bir parametredir ve sözlüğün anahtarlarına karşılık gelen yinelenebilir herhangi bir Python olabilir.
  • values isteğe bağlı bir parametredir. Yinelenebilir değerleri belirtmezseniz, None varsayılan değeri kullanılır.

Değerleri belirtmeden, dict.fromkeys(sweets) , değerlerin None olarak ayarlandığı bir Python sözlüğü döndürür – varsayılan değer. Aşağıdaki kod hücresi bunu açıklar.

 dict.fromkeys(sweets) # Output {'cake': None, 'candy': None, 'cheesecake': None, 'cupcake': None, 'lollipop': None}

Önceki bölümde olduğu gibi, aşağıda gösterildiği gibi sözlüğü tekrar bir listeye dönüştürebiliriz.

 unique_sweets = list(dict.fromkeys(sweets)) print(unique_sweets) # Output ['cupcake', 'candy', 'lollipop', 'cake', 'cheesecake']

Yukarıdaki çıktıdan, yinelenen öğelerin sweets listesinden kaldırıldığını görebiliriz.

Özetliyor

Python listelerinden yinelenen öğeleri veya tekrarları kaldırmak için kullanabileceğiniz farklı yöntemlerin bir özetini burada bulabilirsiniz.

  • Yeni bir listeye tekrarlanmayan öğeleri eklemek için Python liste yöntemini .append() kullanın. Yeni liste, orijinal listedeki her öğeyi tam olarak bir kez içerir ve tüm tekrarları kaldırır. Bunu, liste anlama özelliğini kullanarak da yapabilirsiniz.
  • Tam olarak iki kez oluşan öğeleri kaldırmak için yerleşik .count() ve .remove() yöntemlerini kullanın. Aynısı, tüm ek oluşumları kaldırmak için bir süre döngüsüne yerleştirilebilir.
  • Yalnızca benzersiz öğeleri korumak için bir Python listesini bir kümeye yayınlayın.
  • Sözlükte tekrarlama anahtarı olmaması gerektiğinden, yinelenenleri listeden kaldırmak için dict.fromkeys(list) kullanın.

Ardından, pratik yapmak ve öğrenmek için Python projelerine göz atın. Veya Python listelerinde bir öğenin dizinini nasıl bulacağınızı öğrenin. Mutlu öğrenme!