2016-03-27 4 views
3

Есть ли способ подсчета количества вхождений набора строковых списков?Подсчет нескольких вхождений в список заданий

Например, когда у меня есть этот список, он насчитывает 7 ' ' пробелов.

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

Есть ли способ, которым я могу сделать то же самое, но для набора нескольких списков? Как это, например, показано ниже:

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

Когда я сделать это таким же образом, выход я получаю 0, а не фактический подсчет вхождений.

ответ

7

Решение

Это работает:

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

Вы должны рассчитывать в каждом подсписке. Для этого я использую generator expression и суммирую результаты из всех подписок. BTW, не используйте set в качестве имени переменной. Это встроенный.

Производительность

Хотя не так важно для многих случаев, производительность может быть интересно:

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

против

%timeit sum(1 for i in chain.from_iterable(data) if i==' ') 
100000 loops, best of 3: 4.79 µs per loop 
Смежные вопросы