Python - считать каждую букву в списке слов - PullRequest
1 голос
/ 15 июня 2011

Итак, у меня есть список слов `wordList = list (). ' Прямо сейчас я считаю каждую букву в каждом слове во всем списке, используя этот код

cnt = Counter()
for words in wordList:
      for letters in words:
          cnt[letters]+=1

Однако я хочу, чтобы это считалось по-другому. Я хочу, чтобы функция находила наиболее распространенную букву из всех слов в списке, но только путем подсчета каждой буквы за слово один раз (игнорируя тот факт, что некоторые слова могут иметь несколько копий одной и той же буквы).

Например, если список содержал слова «счастливый, гарпийный и поспешный», два «счастливых» должны учитываться только один раз. Таким образом, функция должна возвращать список букв с самой высокой частотой (по порядку) без двойного счета. В приведенном выше случае это будет 'h, a, p, y, r, s "

Ответы [ 7 ]

7 голосов
/ 15 июня 2011
cnt = Counter()
for words in wordList:
      for letters in set(words):
          cnt[letters]+=1
6 голосов
/ 15 июня 2011

Добавить set вызов:

cnt = Counter()
for word in wordList:
      for letter in set(word):
          cnt[letter]+=1
3 голосов
/ 15 июня 2011

Альтернативный подход с использованием комбинаторов итераторов в itertools:

import collections
import itertools

cnt = collections.Counter(itertools.chain.from_iterable(itertools.imap(set, wordList)))
2 голосов
/ 15 июня 2011

Вы можете исключить for с помощью update, который обновляет счет из повторяемой (в данном случае строки):

from collections import Counter
words = 'happy harpy hasty'.split()
c=Counter()
for word in words:
    c.update(set(word))
print c.most_common()
print [a[0] for a in c.most_common()]

[('a', 3), ('h', 3), ('y', 3), ('p', 2), ('s', 1), ('r', 1), ('t', 1)]
['a', 'h', 'y', 'p', 's', 'r', 't']
2 голосов
/ 15 июня 2011
cnt = Counter()
for word in wordList:
    lSet = set(word)
    for letter in lSet:
        cnt[letter] +=1             
1 голос
/ 15 июня 2011

Это создает набор из каждого слова и передает их конструктору Counter.

>>> 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']
0 голосов
/ 03 августа 2018
import collections

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

cnt = list(cnt)

print(cnt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...