В следующих отчетах учитывается количество вхождений элементов в списках
def flatten(lst):
" Flattens into single lists "
return [val for sublist in lst for val in sublist]
def occurences(*lsts):
" Takes in an arbitrary number of lists and reports frequencies of items "
result = {}
for i, lst in enumerate(lsts):
f_lst = flatten(lst)
for c in f_lst:
result.setdefault(c, set()).add(i)
# Add frequencies
# key frequency is the count
# key occurs is which numbered list of the item
final = {}
for c, s in result.items():
final[c] = {'frequency': len(s), 'occurs':list(s)}
return final
Использование
stats = occurrences(List1, List2, ..., ListN)
Тест
Тест 1 (ListA и ListB являются ссылками как 0, встречается 1)
ListA = [ ['a', 'b', 'a', 'c', 'd'] , ['q', 'w', 'a', 'c'] ]
ListB = [ ['a', 'p', 'z', 'c', 'q'] , ['a', 'l', 'k', 'j'] ]
from pprint import pprint as pp
pp(occurences(ListA, ListB))
{'a': {'frequency': 2, 'occurs': [0, 1]},
'b': {'frequency': 1, 'occurs': [0]},
'c': {'frequency': 2, 'occurs': [0, 1]},
'd': {'frequency': 1, 'occurs': [0]},
'j': {'frequency': 1, 'occurs': [1]},
'k': {'frequency': 1, 'occurs': [1]},
'l': {'frequency': 1, 'occurs': [1]},
'p': {'frequency': 1, 'occurs': [1]},
'q': {'frequency': 2, 'occurs': [0, 1]},
'w': {'frequency': 1, 'occurs': [0]},
'z': {'frequency': 1, 'occurs': [1]}}
Тест 2 (ListA, ListB, List C упоминается как 0, 1, 2 встречается)
ListA = [ ['a', 'b', 'a', 'c', 'd'] , ['q', 'w', 'a', 'c'] ]
ListB = [ ['a', 'p', 'z', 'c', 'q'] , ['a', 'l', 'k', 'j'] ]
ListC = [ ['m', 'p', 'r', 's', 'q'] , ['a', 't', 'k', 'j'] ]
from pprint import pprint as pp
pp(occurences(ListA, ListB, ListC))
{'a': {'frequency': 3, 'occurs': [0, 1, 2]},
'b': {'frequency': 1, 'occurs': [0]},
'c': {'frequency': 2, 'occurs': [0, 1]},
'd': {'frequency': 1, 'occurs': [0]},
'j': {'frequency': 2, 'occurs': [1, 2]},
'k': {'frequency': 2, 'occurs': [1, 2]},
'l': {'frequency': 1, 'occurs': [1]},
'm': {'frequency': 1, 'occurs': [2]},
'p': {'frequency': 2, 'occurs': [1, 2]},
'q': {'frequency': 3, 'occurs': [0, 1, 2]},
'r': {'frequency': 1, 'occurs': [2]},
's': {'frequency': 1, 'occurs': [2]},
't': {'frequency': 1, 'occurs': [2]},
'w': {'frequency': 1, 'occurs': [0]},
'z': {'frequency': 1, 'occurs': [1]}}