Товарищи, если не трудно, можете пожалуйста написать как работает каждая строчка этой программы.
words = ['wolf', 'cat', 'dog', 'wolf']
d = {}
for w in words:
d[w] = d[w] + 1 if d.get(w, None) else 1
most_frequent = sorted(d.items(), key=lambda t: t[1])[-1][0]
print(most_frequent)
Python
Объясните пожалуйста как работает программа
words = ['wolf', 'cat', 'dog', 'wolf']
d = { }
for w in words: # Проход по списку words
d[w] = d[w] + 1 if d.get(w, None) else 1 # Подсчитывает сколько раз встретился элемент в списке, хотя и очень идиотским способом
most_frequent = sorted(d.items(), key=lambda t: t[1])[-1][0] # Сортирует по значению, берет последний кортеж, и берет из него первый элемент
print(most_frequent) # выводит
d = { }
for w in words: # Проход по списку words
d[w] = d[w] + 1 if d.get(w, None) else 1 # Подсчитывает сколько раз встретился элемент в списке, хотя и очень идиотским способом
most_frequent = sorted(d.items(), key=lambda t: t[1])[-1][0] # Сортирует по значению, берет последний кортеж, и берет из него первый элемент
print(most_frequent) # выводит
Поиск наиболее частых элементов списка?
В Питоне как почти и всегда это делается одной строчкой
words = ['wolf', 'cat', 'dog', 'wolf']
print(set(filter(lambda x: words.count(x) == max([words.count(i) for i in words]), words)))
>>>
У Черного Афганца даже еще короче... Но он на такие штуки мастер )))
В Питоне как почти и всегда это делается одной строчкой
words = ['wolf', 'cat', 'dog', 'wolf']
print(set(filter(lambda x: words.count(x) == max([words.count(i) for i in words]), words)))
>>>
У Черного Афганца даже еще короче... Но он на такие штуки мастер )))
Сергей Смирнов
Это тот же человек, что задавал прошлый вопрос, но он решил взять свой алгоритм где-то и спросить как он работает)
эта программа записывается в одну строку
print(max((s:=['wolf', 'cat', 'dog', 'wolf']), key=s.count))
print(max((s:=['wolf', 'cat', 'dog', 'wolf']), key=s.count))
Код, который в вопросе, с помощью словаря, находит количество каждого элемента списка за один проход списка, то есть O(N).
То есть довольно быстро при большом количестве элементов в списке.
При большом количестве элементов код из вопроса обработает список гораздо быстрее чем квадратичный вариант (O(N^2)) от Black Afgano.
А тем более кубический вариант (O(N^3)) кода от Молот Шотландцев.
Конечно если в списке несколько штук элементов, то все варианты сработают быстро и тогда может действительно однострочники имеют преимущество перед ужасными четырьмя строчками кода.
PS
Вместо использования самодельного словаря для подсчета количеств каждого из элементов, можно использовать готовый класс Counter из collections
---------------
from collections import Counter
words = ['wolf', 'cat', 'dog', 'wolf']
C = Counter(words)
mx = max(C.values())
B = [c for c in C if C[c]==mx]
print(B)
То есть довольно быстро при большом количестве элементов в списке.
При большом количестве элементов код из вопроса обработает список гораздо быстрее чем квадратичный вариант (O(N^2)) от Black Afgano.
А тем более кубический вариант (O(N^3)) кода от Молот Шотландцев.
Конечно если в списке несколько штук элементов, то все варианты сработают быстро и тогда может действительно однострочники имеют преимущество перед ужасными четырьмя строчками кода.
PS
Вместо использования самодельного словаря для подсчета количеств каждого из элементов, можно использовать готовый класс Counter из collections
---------------
from collections import Counter
words = ['wolf', 'cat', 'dog', 'wolf']
C = Counter(words)
mx = max(C.values())
B = [c for c in C if C[c]==mx]
print(B)
Алексей Дроздов
В авторском варианте первичный обход + сортировка
Похожие вопросы
- Помогите пожалуйста написать 2 программы на Python
- Почему неверно работает программа на python?
- Объясните пожалуйста задачу в Python!
- Объясните принцип работы данной программы. Распишите каждую строчку кода, что за что отвечает.
- Что делать если не работает программа на питоне с базой данных
- Объясните пожалуйста понятней что такое фреймворк?
- Объясните пожалуйста решение этого выражения, если можно максимально подробно описать каждый шаг. Решение через Python
- Добрый день, объясните, пожалуйста, код на python
- Информатика. Объясните пожалуйста что, почему, за чем. Отвечает каждая строка и каждая команда. Пайтон
- Как возвести число в степень в python через цикл while? В чем моя ошибка в коде? Объясните, пожалуйста подробнее
d[w] = d.get(w,0) + 1