1

如果我们知道先例字符,我有一个代码可以计算一个字符的出现次数。
这是我尝试过的,但它不起作用。

该文件仅包含字符为“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。
在此先感谢

4

2 回答 2

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)

whereline是包含要分析的文本的字符串。

于 2013-03-06T10:59:46.500 回答
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)
于 2013-03-06T11:20:31.890 回答