Python—计算单词列表中的每个字母

Python—计算单词列表中的每个字母,python,algorithm,collections,dictionary,Python,Algorithm,Collections,Dictionary,所以我有一个单词列表'wordList=list()'。现在,我正在使用这个代码计算整个列表中每个单词中的每个字母 cnt = Counter() for words in wordList: for letters in words: cnt[letters]+=1 然而,我希望它的计算方式有所不同。我希望函数能够从列表中的所有单词中找到最常见的字母,但只能通过对每个单词的每个字母进行一次计数(忽略某些单词可能具有同一字母的多个副本这一事实) 例如,如果列表中

所以我有一个单词列表'wordList=list()'。现在,我正在使用这个代码计算整个列表中每个单词中的每个字母

cnt = Counter()
for words in wordList:
      for letters in words:
          cnt[letters]+=1
然而,我希望它的计算方式有所不同。我希望函数能够从列表中的所有单词中找到最常见的字母,但只能通过对每个单词的每个字母进行一次计数(忽略某些单词可能具有同一字母的多个副本这一事实)


例如,如果列表中包含“happy、harpy和hasty”,则happy中的两个p只应计算一次。因此,函数应该返回频率最高的字母列表(按顺序),而不重复计数。在上述情况下,它将是“h、a、p、y、r、s”

添加一个
set
调用:

cnt = Counter()
for word in wordList:
      for letter in set(word):
          cnt[letter]+=1

添加一个
set
调用:

cnt = Counter()
for word in wordList:
      for letter in set(word):
          cnt[letter]+=1

您可以使用
update
删除
for
,该函数从iterable(在本例中为字符串)更新计数:



您可以使用
update
删除
for
,该函数从iterable(在本例中为字符串)更新计数:



itertools
中使用迭代器组合器的另一种方法:

import collections
import itertools

cnt = collections.Counter(itertools.chain.from_iterable(itertools.imap(set, wordList)))

itertools
中使用迭代器组合器的另一种方法:

import collections
import itertools

cnt = collections.Counter(itertools.chain.from_iterable(itertools.imap(set, wordList)))

这将从每个单词创建一个集合,并将它们传递给计数器的构造函数

>>> from itertools import chain, imap
>>> from operator import itemgetter
>>> from collections import Counter
>>> words = 'happy', 'harpy', 'hasty'
>>> counter = Counter(chain.from_iterable(imap(set, words)))
>>> map(itemgetter(0), counter.most_common())
['a', 'h', 'y', 'p', 's', 'r', 't']

这将从每个单词创建一个集合,并将它们传递给计数器的构造函数

>>> from itertools import chain, imap
>>> from operator import itemgetter
>>> from collections import Counter
>>> words = 'happy', 'harpy', 'hasty'
>>> counter = Counter(chain.from_iterable(imap(set, words)))
>>> map(itemgetter(0), counter.most_common())
['a', 'h', 'y', 'p', 's', 'r', 't']

在您的示例中,y在3个单词中,而p仅在2个单词中,因此结果应该在p之前有y。在您的示例中,y在3个单词中,而p仅在2个单词中,因此结果应该在p之前有y。您应该真正使用chain.from_iterable,否则*arg扩展将强制同时计算imap。您应该真正使用chain.from_iterable,否则t他*arg扩展将强制同时对imap进行所有评估,而此代码可能会回答此问题,提供有关此代码为什么和/或如何回答此问题的附加上下文可提高其长期价值。虽然此代码可能会回答此问题,但提供有关此代码为什么和/或如何回答此问题的附加上下文imp证明了它的长期价值。
>>> from itertools import chain, imap
>>> from operator import itemgetter
>>> from collections import Counter
>>> words = 'happy', 'harpy', 'hasty'
>>> counter = Counter(chain.from_iterable(imap(set, words)))
>>> map(itemgetter(0), counter.most_common())
['a', 'h', 'y', 'p', 's', 'r', 't']
import collections

cnt = collections.Counter('happy harpy hasty').keys()

cnt = list(cnt)

print(cnt)