如果我们知道先前的角色,我会有一个代码,它会计算一个角色的出现次数
这是我尝试过的,但它不起作用。
该文件仅包含带有字符的单词“K”,“L”,“G”,“A”,“S”,“”。
text = open("fichier_a_compresser 1.txt", 'r')
alphabet = ("K", "L", "G", "A", "S", " ")
for i in text:
characterlist = list(i)
j = 0
cont = 0
for i in alphabet:
for k in alphabet:
while j < len(characterlist):
if (characterlist[j-1]==k and characterlist[j]==i):
cont = cont + 1
j = j + 1
print str(i) + " appears after the character " + str(k) + " " + str(cont) + " times."
cont = 0
我认为我在'续'部分做错了,因为退出总是为0 提前致谢
答案 0 :(得分:1)
以下代码:
for i in text:
characterlist = list(i)
可能不会做你认为它做的事情。它为文件的每一行分配角色列表,一次一个。当循环终止时,它具有文件的最后一行,丢弃了所有其他行。即使您只想使用最后一行,也不必将其转换为列表,我认为这是list(i)
背后的意图。字符串的行为就像列表一样。
至于算法本身,我很难跟上它。我认为这可能更接近你想要的东西:
freqs = [ (a, b, len(line.split(a + b)) - 1) for a in alphabet for b in alphabet ]
for (a, b, f) in freqs:
print '{} appears after {} {} times.'.format(a, b, f)
其中line
是一个包含您要分析的文本的字符串。
答案 1 :(得分:0)
使用来自集合模块的Python优秀数据结构可以让您的生活更轻松:
from collections import defaultdict, Counter
txt = open("fichier_a_compresser 1.txt").read()
counts = defaultdict(Counter)
for i in range(len(txt)-1):
counts[txt[i]][txt[i+1]]+=1
for first, counter in counts.items():
for second, count in counter.items():
print '{} appears after the character {} {} times.'.format(second, first, count)