Dizgideki toplam kopya sayısını nasıl bulurum? , yani j= [1,1,1,2,2,2]
ise, kopyalarını bulur mu? Sadece, her bireysel sayının kaç kez oluştuğunu gösteren sayımı bulabildim. Bu egzersizin amacı için gerçekten önemli değil rağmenPython'da Yinelenen Sayıcılar Sayma
6
A
cevap
17
>>> j= [1,1,1,2,2,2]
>>> len(j) - len(set(j))
4
söyliyim, j
, bir liste ve bir dizedir.
7
Zaten popüler bir yanıt var gibi görünüyor, ancak bireysel yinelenen sayıları da korumak istiyorsanız, Python 2.7'deki yeni Counter()
koleksiyon nesnesi bunun için mükemmel.
>>> from collections import Counter
>>> j = [1,1,1,2,2,2]
>>> Counter(j)
Counter({1: 3, 2: 3})
>>> sum([i - 1 for i in c.values() if i > 1])
4
>>> {k: v - 1 for k, v in c.items()} # individual dupes
{1: 2, 2: 2}
bazı öneriler/gözlemler vardır: Tek 'c = Sayaç (j)' orada bir yerde işletilirse varsaymak gerekir. Toplam şeyinizle, Python 2.7'ye ihtiyacınız var, bu yüzden '' '' yi kaybedebilirsiniz. İkincisi, 'if' cümlesi gereksizdir. Üçüncü olarak, 'c.values ()' listesini oluşturmanın bir anlamı yoktur. Sonuç: 'toplamı (i - i için c.itervalues () içinde) veya bazı cebirlerden sonra, toplamı (c.itervalues ()) - len (c)' yi deneyin. Dupe olmayan bir ör. 3 girişe. Tek tek kopyaların sözlüğünün gerçekten istediğiniz şeyi olup olmadığını kontrol edin. HTH. –
Tamam… Öncelikle, bana nasıl “1” in “gereksiz” olduğunu söyle? Olumsuz tam sayıların dict içine girmesi durumunda 'i' 'yi önlemek için **' ye ihtiyacım var. Dolayısıyla karşılaştırma, ne olursa olsun olur. Şimdi, 999.000’in '0' olduğu 1M öğelerinin bir listesini düşünün ve daha sonra devam etmemem gerektiğini ve' 0’ın listeye ekleme yapmasını da engellemeliyim. "Bazı cebirlerden sonra" bana söylediğiniz gibi geliyor, bunu öğrenmem gerekiyor, ama dediğim gibi, "-1000000" kelimesinin, "Counter () 'değiştirir. – jonwd7
İkinci olarak, 'Counter()' işlevini kullanmama, backport'a bir bağlantı eklediğimden 2.7'ye gerek duymaz. (Bir dict anlama kullanıyoruz ama bu çok hızlı bir şekilde değişebilir). Bu yüzden "[]' yi kaybedebilir veya edemem ... Ama bu ne anlama geliyor? Üçüncü olarak, 'itervalues'/'iteritems' bu basit örnek için işe yaramazdı ve yazmak daha zordu, bu yüzden beni affet. Ve son olarak, 3'üncü olmayanlar hakkında ne kastettiğiniz hakkında hiçbir fikrim yok ... Bu, '..., 3: 0}' ı basar ve OP * et'in tam olarak ne olabileceği gibi olmayabilir. al * bu durumda olmak istiyorum. O zaman ben? – jonwd7