为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

人到中年有点甜 2021-10-12 17:25:01
我试图在单词列表中找到最常用的字母。我在算法上苦苦挣扎,因为我只需要在跳过重复项时计算一个单词中的字母频率,所以我需要帮助找到一种方法来计算整个列表中字母的频率,每个单词只出现一次,忽略第二次出现。例如,如果我有: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但它仍然需要工作,我不能考虑其他任何事情,我很高兴任何能帮助我考虑可行解决方案的人。
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

不使用更新的@Primusa 答案的变体:


from collections import Counter


words = ["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})

基本上将每个单词转换为一个集合,然后迭代每个集合。


查看完整回答
反对 回复 2021-10-12
?
智慧大石

TA贡献1946条经验 获得超3个赞

创建一个计数器对象,然后用每个单词的集合更新它:


from collections import Counter


wordlist = ["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。


查看完整回答
反对 回复 2021-10-12
?
慕森王

TA贡献1777条经验 获得超3个赞

一个没有柜台


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}


查看完整回答
反对 回复 2021-10-12
  • 3 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号