Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 2
Регистрация: 23.05.2013
Сообщений: 60

Просьба объяснить новичку по коду (поиск частоты слов)

14.01.2014, 23:55. Показов 1009. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Только начал изучать питон, наткнулся в интернете на такой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from urllib2 import urlopen         # из модуля urllib2 импортируем функцию urlopen
 
u = urlopen("http://python.org")    # открываем URL на чтение
words = {}                          # связываем имя words с пустым словарём
                                    # (словарь — неупорядоченный [[ассоциативный массив]])
for line in u:          # читаем u по строкам
    line = line.strip(" \n")    # отбрасываем начальные и конечные пробелы
    for word in line.split(" "): # режем каждую строку на слова, ограниченные пробелами
        try:                            # блок обработки исключений
            words[word] += 1            # пытаемся увеличить words[word] на единицу
        except KeyError:                # если не получилось (раньше words[word] не было)
            words[word] = 1             # присваиваем единицу
 
# теперь словарь words содержит частоту встречаемости каждого слова.
# Например, words может содержать {"яблоко":5, "апельсин": 12, "груша": 8}
 
pairs = words.items()               # делаем из словаря список пар
                                    # pairs == [("яблоко",5), ("апельсин",12), ("груша",8)]
pairs.sort(key=lambda x: x[1], reverse=True)  # сортируем по убыванию второго элемента пары
 
for p in pairs[:10]:                # печатаем первые 10 элементов списка
    print p[0], p[1]

Как тут "задается" "line" я понял, но в строке цикла for word и далее, не понимаю как реализована строка "words[word] += 1", так как words это список, а в "индекс" этого списка [word]. Получается что каждое отрезанное значение - значение word? Откуда питон это знает?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.01.2014, 23:55
Ответы с готовыми решениями:

Просьба объяснить новичку js в Android?
Коротко о проблеме. AS ссылается на ошибки в коде, откуда они, я понять не могу. Все делал вроде по гайду. Приложение для скана QR кодов....

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

Просьба объяснить
Сделал 4 задания, сейчас с собой нет методички получилось что-то типа такого: xor dh, 27h | xor r/m8, im8 80/6im Код dh=110 |1|1| ...

4
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
15.01.2014, 00:20
Цитата Сообщение от EnLate Посмотреть сообщение
words[word] += 1", так как words это список, а в "индекс" этого списка [word].
Ты не правильно понял, words это словарь, а не список. В словаре идет обращение по ключу, в данном случае ключём является слово из текста.

Вот тут в краце объясняется, что такое словарь http://pythonworld.ru/tipy-dan... varej.html
0
0 / 0 / 2
Регистрация: 23.05.2013
Сообщений: 60
15.01.2014, 01:12  [ТС]
Ага, спасибо. То есть сам цикл "for word in line.split(" "):" означает что мы режем каждый пробел и в результате получаем отрезки под общим ключом word?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
15.01.2014, 01:43
Это значит, что мы разрезаем строку по знаку пробела и в результате получаем список с отдельными словами, которые потом перебираем.
Вот пример:
Python
1
2
3
>>> 'привет пока как дела'.split(' ')
['привет', 'пока', 'как', 'дела']
>>>
1
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
15.01.2014, 07:26
Python
1
2
3
4
5
6
7
8
9
10
>>> from urllib2 import urlopen
>>> def freq_words(url):
...   words = ''.join(urlopen(url)).split()
...   return {word: int(words.count(word)) for word in  words}.items()
... 
>>> url = 'http://python.org'
>>> print freq_words(url)[:7]
[('href="/about/website">Website', 1), ('id="sitesearch"', 1), ('id="skiptonav"', 1), ('Foundation</a>', 1), ('href="http://www.xs4all.com/"', 1),
 ('href="http://www.egenix.com/files/python/mxODBC.html">ODBC</a>,', 1), ('/', 1)]
>>>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2014, 07:26
Помогаю со студенческими работами здесь

просьба объяснить
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { long a, b; char s, c; int i; ...

Просьба объяснить код
#include &lt;iostream&gt; #include &lt;map&gt; using namespace std; int main () { long long n, sumOfDivisors = 1; cin &gt;&gt; n; ...

Просьба объяснить записи (x2)
Если возможно, то с расшифровкой уравнений. (Старина, ты мне нужен) #include &lt;stdio.h&gt; #include &lt;math.h&gt; float abs2(float x)...

Просьба объяснить синтаксис!)
Уважаемые форумчане помогите разобраться в синтаксисе. Не могу найти в гугле. Знающие люди объясните простым языком! Вот строчка не...

Просьба объяснить записи
Ребят, помогите разобраться в коде. Если не сложно, подпишите обозначения к каждому циклу? #include &lt;stdio.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru