2015-06-08 3 views
2

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

import numpy as np 
a = [np.array([2, 2, 1, 2]), np.array([1, 3])] 

Ожидаемый результат:

[3, 0] 

Может кто-нибудь мне помочь?

ответ

5

Один из способов заключается в использовании Counter

In [3]: from collections import Counter 

дает частоты всех чисел

In [4]: [Counter(x) for x in a] 
Out[4]: [Counter({2: 3, 1: 1}), Counter({1: 1, 3: 1})] 

Чтобы рассчитывать только для 2

In [5]: [Counter(x)[2] for x in a] 
Out[5]: [3, 0] 

В качестве альтернативы можно использовать np.bincount метод, для подсчета количества вхождений каждого значения в массиве неотрицательных целых чисел.

In [6]: [np.bincount(x) for x in a] 
Out[6]: [array([0, 1, 3], dtype=int64), array([0, 1, 0, 1], dtype=int64)] 

Извлечение счета для числа 2

In [7]: [np.bincount(x)[2] for x in a] 
Out[7]: [3, 0] 
+0

х = [[массив ([- 2, 0, 0]), массив ([-2, -1, 1])], [array ([3, -1]), array ([1, -2])]]. При применении к этой переменной x она возвращает ошибку. Благодарю. Ваш ответ очень полезен. – Xiong89

2

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

>>> [sum(b==2) for b in a] 
[3, 0] 
+0

Вы делаете это проще с '[sum (b == 2) для b в a]'? – Zero

+0

Хорошая точка. Я предпочитаю вашу упрощенную версию. – Alexander

Смежные вопросы