2016-03-27 10 views
3

Bir dizi dize listesi miktarını saymanın bir yolu var mı?Kümeler listesinde birden çok yinelemeyi sayma

Örneğin, bu listeye sahip olduğumda, 7 ' ' boşlukları sayar.

list = [[' ', ' ', ' ', ' ', ' ', ' ', ' ']] 
print(list.count(' ')) 

Aynı şeyi yapabileceğimin bir yolu var mı, yoksa birden çok liste için mi? Aşağıdaki örnek bu gibi: Ben öyle aynı şekilde yaptığınızda

set = [[' ', ' ', ' ', ' ', ' ', ' ', ' '], 
     [' ', ' ', ' ', ' ', ' ', ' ', ' '], 
     [' ', ' ', ' ', ' ', ' ', ' ', ' ']] 
print(set.count(' ')) 

, ben olsun çıkış 0 değil olaylar gerçek sayısıdır.

cevap

7

Çözüm

Bu çalışır:

>>> data = [[' ', ' ', ' ', ' ', ' ', ' ', ' '], 
      [' ', ' ', ' ', ' ', ' ', ' ', ' '], 
      [' ', ' ', ' ', ' ', ' ', ' ', ' ']] 
>>> sum(x.count(' ') for x in data) 
21 

Her alt listesindeki saymak gerekir. Bunu yapmak için generator expression kullanıyorum ve sonuçları tüm alt listelerden topladım. BTW, set değişken adı olarak kullanmayın. Yerleşik.

Performans

iken pek çok durum için o kadar önemli değil, performans ilginç olabilir:

%timeit sum(x.count(' ') for x in data) 
1000000 loops, best of 3: 1.28 µs per loop 

vs

%timeit sum(1 for i in chain.from_iterable(data) if i==' ') 
100000 loops, best of 3: 4.79 µs per loop