Как рассчитать пропорции слов, которые появляются с заглавной буквы

Вы правы в том, что код помещает пользовательский интерфейс в режим сна. Поскольку sleep вызывается в Thread Dispatch Thread (поток, ответственный за запуск gui), пользовательский интерфейс останавливает обработку событий и «переходит в режим сна».

Я думаю, что вы хотите javax.swing.Timer .

Timer t = new Timer(1000 * 5, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do your reoccuring task
    }
});

Это приведет к тому, что ваша повторная задача будет выполнена вне EDT, и, следовательно, она не оставит ваш ui невосприимчивым.

3
задан jpp 18 January 2019 в 11:13
поделиться

2 ответа

Вы можете сделать что-то вроде этого:

from collections import Counter

word_list = ["capital", "Capital", "Capital", "Capital", "capital", "bus", "Bus", "bus", "Bus", "white"]

# count them all while ignoring case
count = Counter(x.lower() for x in word_list)  

# count only the title-case ones
uppers = Counter(x.lower() for x in word_list if x[0].isupper())

# get frequency
res = {k.capitalize(): uppers.get(k, 0)/v for k, v in count.items()} 

, что приведет к желаемому:

print(res)  # -> {'Capital': 0.6, 'Bus': 0.5, 'White': 0.0}
0
ответ дан Ev. Kounis 18 January 2019 в 11:13
поделиться

Слова отсортированы: itertools.groupby

Предполагая, что, как в вашем примере, ваши строки отсортированы, вы можете использовать groupby с statistics.mean :

from itertools import groupby
from statistics import mean

grouper = groupby(word_list, key=str.casefold)
res = {k.capitalize(): mean(x[0].isupper() for x in words) for k, words in grouper}

# {'Bus': 0.5, 'Capital': 0.6, 'White': 0}

Слова не обязательно отсортированы: sorted + groupby

В этом случае вы можете отсортировать перед , применяя приведенную выше логику:

word_list = sorted(word_list, key=str.casefold)

Это добавляет сложности алгоритму, если ваш список не отсортирован.

Слова не обязательно отсортированы: collections.defaultdict

Альтернативой является создание словаря со списками логических значений через collections.defaultdict , затем используйте statistics.mean:

[ 112]
0
ответ дан jpp 18 January 2019 в 11:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: