2013-07-18 68 views
5

Làm cách nào để đếm số lần xuất hiện của một số giá trị trong một mảng đa chiều được tạo bằng danh sách lồng nhau? như trong khi tìm kiếm 'foobar' trong danh sách sau:python .count cho mảng đa chiều (danh sách danh sách)

list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']] 

cần trả lại 2.

(vâng Tôi biết rằng tôi có thể viết một vòng lặp mà chỉ tìm kiếm thông qua tất cả của nó, nhưng tôi không thích giải pháp mà vì nó là khá tốn thời gian, (viết và trong thời gian chạy))

.count có lẽ?

Trả lời

9
>>> list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']] 
>>> sum(x.count('foobar') for x in list) 
2 
0
>> from collections import Counter 
>> counted = Counter([item for sublist in my_list for item in sublist]) 
>> counted.get('foobar', 'not found!') 
>> 2 
#or if not found in your counter 
>> 'not found!' 

này sử dụng làm phẳng của các danh sách con và sau đó sử dụng các mô-đun collectionsCounter để sản xuất các tội danh từ.

2

Đầu tiên join the lists together using itertools, sau đó chỉ cần đếm từng xảy ra bằng cách sử dụng Collections module:

import itertools 
from collections import Counter 

some_list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']] 
totals = Counter(i for i in list(itertools.chain.from_iterable(some_list))) 
print(totals["foobar"]) 
Các vấn đề liên quan