2016-03-27 1 views
3

Existe-t-il un moyen de compter les occurrences d'un ensemble de listes de chaînes? Par exemple, quand j'ai cette liste, elle compte 7 ' ' espaces.Comptabiliser plusieurs occurrences dans une liste d'ensembles

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

Y at-il un moyen que je peux faire la même chose, mais pour un ensemble de listes multiples? Comme ceci par exemple ci-dessous:

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

Quand je fais la même façon, la sortie je reçois est 0 et non le nombre réel d'occurrences.

Répondre

7

Solution

Cela fonctionne:

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

Vous devez compter dans chaque sous-liste. J'utilise un generator expression pour faire cela et additionne les résultats de toutes les sous-listes. BTW, n'utilisez pas set comme nom de variable. C'est un built-in.

Performance

Bien que pas important pour de nombreux cas, la performance peut être intéressant:

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

contre

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