Python ile Listede Zaten Olan Sayıları Ayrı Bir Listede Döndürme
Python kullanarak örnek algoritma sorularını çözdüğümüz serimizin beşinci sorusuna geçelim:
- Bir dizideki tüm aynı sayıları ayrı bir liste içinde döndüren program yazın
- Örnek girdi: [1, 2, 2, 3, 4, 4, 4, 2, 5]
- Örnek çıktı: [2, 4]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def find_duplicates(numbers): # Sayıların kaç kez geçtiğini sözlük yapısında saklayalım number_counts = {} for num in numbers: number_counts[num] = number_counts.get(num, 0) + 1 # Sadece 1'den fazla geçen sayıları döndürelim duplicates = [num for num, count in number_counts.items() if count > 1] return duplicates sample_input = [1, 2, 2, 3, 4, 4, 5] find_duplicates(sample_input) print(find_duplicates(sample_input)) |
Yukarıdaki örneğimizde, bir dizi içerisinde birden fazla geçen sayıları tespit etmek amacıyla bir fonksiyon oluşturduk. İlk adımda, anahtar olarak sayıları ve değer olarak bu sayıların kaç kez geçtiğini saklamak için number_counts
adında bir sözlük tanımladık.
Sonrasında, numbers
dizisini for döngüsü ile geziyoruz. Bu döngü içerisinde her bir sayıyı (yani num
‘u) alıp number_counts
sözlüğünde kontrol ediyoruz. Eğer num
anahtarı sözlükte varsa, bu anahtarın karşılık geldiği değeri döndürür. Eğer num
anahtarı sözlükte yoksa, get
metodu ikinci parametre olan 0
değerini döndürür.
Eğer bu sayı zaten sözlükte varsa, bu sayının tekrarı olduğu anlamına gelir. Bu durumda, bu sayının değerini (yani kaç kez karşımıza çıktığını gösteren değeri) bir artırdık.
“List comprehension” yöntemini kullanarak, number_counts
sözlüğündeki sayıları inceledik. Bu sözlükte, her sayının kaç kez geçtiği bilgisi var. Eğer bir sayı birden fazla kez geçiyorsa, bu sayıyı yeni bir listeye eklemek istiyoruz.
İlk olarak number_counts.items()
ile sözlükten anahtar-değer çiftlerini alıyoruz. Daha sonra bu çiftler üzerinde döngü başlatıyoruz. Her dönüşte, num
değişkeni anahtarı (yani sayıyı) ve count
değişkeni bu anahtarın değerini (yani sayının kaç kez geçtiğini) alıyor.
Eğer count
değeri 1’den büyükse (yani bir sayı birden fazla kez geçiyorsa), bu sayıyı (yani num
‘u) yeni listeye ekliyoruz. Kodu çalıştırmak için: Trinket
Çözümümüzü anlaşılır olması adına bir de uzun yoldan yapalım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
def find_duplicates_longway(numbers): # Sayıların kaç kez geçtiğini takip eden bir sözlük oluşturalım number_counts = {} # Her sayı için, eğer sözlükte bu sayı varsa, sayının değerini bir artır # Eğer sözlükte bu sayı yoksa, bu sayıyı sözlüğe ekleyip değerini 1 yap for num in numbers: if num in number_counts: number_counts[num] += 1 else: number_counts[num] = 1 # Sadece 1'den fazla geçen sayıları bir listeye ekleyelim duplicates = [] for num, count in number_counts.items(): if count > 1: duplicates.append(num) return duplicates sample_input = [1, 2, 2, 3, 4, 4, 5] find_duplicates_longway(sample_input) print(find_duplicates_longway(sample_input)) |
Kodu çalıştırmak için: Trinket