Disclaimer: я только начал изучать питон.
Имеется текстовый файл следующего содержания (в качестве примера):
A-B-C-D
A-B-D-E
A-C-E
A-B-C-E
A-B
B-E
A-D-E
B-C
...
В каждой строке A,B,C,D,E — это некие состояния, разделенные делимитером '-'. Я пишу скрипт на питоне который должен подсчитать частоту перехода состояний равно как и количество входных и выходных состояний, например:
A входное 6 раз
E выходное 5 раз
A->B 4 раза
B->C 3 раза
C->D 1 раз
и т.д.
Подсчитать частоту A,B,C,D несложно, но мне нужно именно переходы и одного состояния в другое.
Вот что я соорудил — входной файл читается в строку, далее эта строка режется splitlines() построчно и кладется в список. Данный список подается на вход вот этой функции которая все считает:
def count_states(lines):
states = dict()
for l in lines:
words = l.split('-')
if not words[0] in states:
states[words[0]] = 1
else:
states[words[0]] += 1
for w in zip(words, words[1:]):
if not w in states:
states[w] = 1
else:
states[w] += 1
if not w[-1] in states:
states[w[-1]] = 1
else:
states[w[-1]] += 1
return states
Вроде бы все считается правильно. Но можно ли написать компактнее и более «в духе» питона?
Спасибо.