如果我们知道前一个字符,则用Python计算字符外观

时间:2013-03-06 10:50:37

标签: python character word

如果我们知道先前的角色,我会有一个代码,它会计算一个角色的出现次数 这是我尝试过的,但它不起作用。

该文件仅包含带有字符的单词“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 提前致谢

2 个答案:

答案 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)