计算单词列表中的字母频率,排除同一单词中的重复项

我试图在单词列表中找到最常用的字母。我在算法上苦苦挣扎,因为我只需要在跳过重复项时计算一个单词中的字母频率,所以我需要帮助找到一种方法来计算整个列表中字母的频率,每个单词只出现一次,忽略第二次出现。


例如,如果我有:


words = ["tree", "bone", "indigo", "developer"]

频率将是:


letters={a:0, b:1, c:0, d:2, e:3, f:0, g:1, h:0, i:1, j:0, k:0, l:1, m:0, n:2, o:3, p:1, q:0, r:2, s:0, t:1, u:0, v:1, w:0, x:0, y:0, z:0}

正如您从字母字典中看到的:'e' 是 3 而不是 5,因为如果 'e' 在同一个单词中重复多次,它应该被忽略。


这是我想出的算法,它是用 Python 实现的:


for word in words:

    count=0;


    for letter in word:

        if(letter.isalpha()):

            if((letters[letter.lower()] > 0  && count == 0) ||

               (letters[letter.lower()] == 0 && count == 0)):


                    letters[letter.lower()]+=1

                    count=1


            elif(letters[letter.lower()]==0 && count==1):   

                letters[letter.lower()]+=1

但它仍然需要工作,我不能考虑其他任何事情,我很高兴任何能帮助我考虑可行解决方案的人。


人到中年有点甜
浏览 179回答 3
3回答

慕运维8079593

不使用更新的@Primusa 答案的变体:from collections import Counterwords = ["tree", "bone", "indigo", "developer"]counts = Counter(c for word in words for c in set(word.lower()) if c.isalpha())输出Counter({'e': 3, 'o': 3, 'r': 2, 'd': 2, 'n': 2, 'p': 1, 'i': 1, 'b': 1, 'v': 1, 'g': 1, 'l': 1, 't': 1})基本上将每个单词转换为一个集合,然后迭代每个集合。

智慧大石

创建一个计数器对象,然后用每个单词的集合更新它:from collections import Counterwordlist = ["tree","bone","indigo","developer"]c = Counter()for word in wordlist:    c.update(set(word.lower()))print(c)输出:Counter({'e': 3, 'o': 3, 'r': 2, 'n': 2, 'd': 2, 't': 1, 'b': 1, 'i': 1, 'g': 1, 'v': 1, 'p': 1, 'l': 1})请注意,虽然 中不存在的字母wordlist不存在于 中Counter,但这很好,因为 a 的Counter行为类似于 a defaultdict(int),因此访问不存在的值会自动返回默认值 0。

慕森王

一个没有柜台words=["tree","bone","indigo","developer"]d={}for word in words:         # iterate over words    for i in set(word):    # to remove the duplication of characters within word        d[i]=d.get(i,0)+1输出{'b': 1, 'd': 2, 'e': 3, 'g': 1, 'i': 1, 'l': 1, 'n': 2, 'o': 3, 'p': 1, 'r': 2, 't': 1, 'v': 1}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python