Python dizilerinde öğelerin oluşumlarını verimli bir şekilde saymak, çeşitli etkili çözümlere sahip temel bir görevdir. Bu makale, iki popüler yaklaşımı ele almaktadır: collections
modülünden yararlanma ve NumPy kütüphanesini kullanma. Her yöntem, özel ihtiyaçlarınıza ve verilerinizin özelliklerine bağlı olarak farklı avantajlar sunar.
İçerik Tablosu
collections
Modülünü Kullanma
collections
modülü, herhangi bir yineleyici içindeki öğelerin sıklığını saymak için güçlü bir araç olan Counter
nesnesini sağlar. Bu yaklaşım, çeşitli boyutlarda ve veri tiplerinde diziler için oldukça çok yönlü, okunabilir ve verimlidir.
from collections import Counter
my_array = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 'a', 'a', 'b']
# Counter kullanarak oluşumları say
occurrences = Counter(my_array)
# Belirli bir öğenin sayısına erişim
item_to_count = 3
count = occurrences[item_to_count]
print(f"{item_to_count} öğesinin oluşum sayısı: {count}") # Çıktı: 3
# Belirli bir öğenin (string) sayısına erişim
item_to_count = 'a'
count = occurrences[item_to_count]
print(f"{item_to_count} öğesinin oluşum sayısı: {count}") # Çıktı: 2
# Tüm öğelerin sayılarını yazdır
print(f"Tüm öğe sayıları: {occurrences}")
# Çıktı: Counter({4: 4, 3: 3, 2: 2, 1: 1, 'a': 2, 'b': 1})
Bu kod, Counter
‘ın basitliğini ve esnekliğini göstermektedir. Hem sayısal hem de dize veri tiplerini sorunsuz bir şekilde işler.
NumPy Kütüphanesini Kullanma
NumPy, sayısal hesaplamalar için optimize edilmiştir ve verimli dizi manipülasyon fonksiyonları sağlar. Büyük sayısal diziler için NumPy, önemli performans avantajları sunar.
import numpy as np
my_array = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])
item_to_count = 3
# Boole indekslemesiyle NumPy'nin count_nonzero fonksiyonunu kullan
count = np.count_nonzero(my_array == item_to_count)
print(f"{item_to_count} öğesinin oluşum sayısı: {count}") # Çıktı: 3
# Tüm oluşumları say
unique, counts = np.unique(my_array, return_counts=True)
print(dict(zip(unique, counts))) # Çıktı: {1: 1, 2: 2, 3: 3, 4: 4}
Boole indekslemesiyle birleştirilen NumPy’nin count_nonzero
fonksiyonu, sayısal diziler için özlü ve yüksek performanslı bir çözüm sağlar. np.unique
, tüm benzersiz öğelerin sayılarını almak için kullanışlı bir yol sunar.
Doğru Yöntemi Seçme
En uygun yaklaşım, özel bağlamınıza bağlıdır:
collections.Counter
: Daha küçük diziler, karma veri tiplerine sahip diziler veya birden çok öğenin oluşumlarını verimli ve okunabilir bir kodla saymanız gerektiğinde en iyisidir.- NumPy: Performansın kritik olduğu büyük sayısal diziler için idealdir. NumPy’nin vektörize işlemleri önemli hız avantajları sunar.