Что-то, что вы могли бы сделать, это построить словарь с использованием словарного понимания и посчитать, сколько раз значения в каждой записи в словаре меняются:
d = {'a': ['+','+','-','-','+','-','-','+'], 'b': ['+','+','+','-','-','+','+','+','-'],
'c': ['-','-','-','+','+','+']}
s = {k : sum(1 for i,j in zip(d[k][1:], d[k][:-1]) if i != j) for k in d}
# {'a': 4, 'b': 3, 'c': 1}
Или, если вы предпочитаете, itertools.groupby
:
{k : sum(1 for i in groupby(d[k]))-1 for k in d}
# {'a': 4, 'b': 3, 'c': 1}
Подробности
Чтобы обнаружить изменение элементов в каждом списке, вы можете сравнить его элементы с запаздывающей версией списка, что можно сделать, сжав два фрагмента списка, zip(d[k][1:], d[k][:-1])
.
Например, для ключа a
:
list(zip(d['a'][1:], d['a'][:-1]))
# [('+', '+'), ('-', '+'), ('-', '-'), ('+', '-'), ('-', '+'), ('-', '-'), ('+', '-')]
Теперь просто используйте выражение генератора и добавляйте 1
каждый раз, когда значения в кортеже различаются:
sum(1 for i,j in zip(d['a'][1:], d['a'][:-1]) if i != j)
# 4