Тёмный

Что нужно знать о библиотеке collections в Python 

Python Russian
Подписаться 16 тыс.
Просмотров 16 тыс.
50% 1

Поговорим о коллекциях, что лежат в одноименном модуле и могут нам пригодиться для специфических задач
1) OrderedDict - упорядоченный словарь, несмотря на мнение многих, он все еще актуален, оптимизирован для работы с порядком элементов в словаре. Позволяет доставать пары как с конца так и с начала словаря, переставлять пары в конец или начало словаря. При сравнении учитывает порядок элементов, а не только их равенство. За все это платит большим потреблением памяти.
2) ChainMap нужен для логического объединения словарей для поиска информации, физического копирования словарей не происходит и если изменить один из исходников, то изменении отобразится и в chainMap. Удобен для поиска информации, но при изменениях меняется первый словарь в наборе.
3) Counter - удобный инструмент для подсчета элементов в последовательности, считает только с hashable типы (строки, числа, кортежи).
4) defaultdict нужен для создания словаря со значением по умолчанию. Значение подставляется при обращении к несуществующему ключу, что позволяет не писать лишней логики. В остальном аналогичен обычному словарю.
5) deque - двунаправленная очередь, быстро вставляет элементы как в конец, так и начало, быстро достает с обоих концов. Она потокобезопасна (thread-safe) и может быть использована для многопоточных операций, позволяет задать максимальный размер.
6) namedtuple нужен для создания структуры данных, нечто среднее между стандартными типами и самописным классом. Пригодится когда отдельный класс избыточен или ООП пока неизвестно. Неизменяемый, позволяет обращаться по имени атрибута (причем быстро), позволяет использовать индексы.
Почитать про это все:
docs.python.org/3/library/col...
Присоединяйтесь к помощи каналу, будет интересно)
✔️Бусти boosty.to/python_russian/donate
✔️Юмани 410011506612886
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
#Python #PythonRussian #PyCharm

Опубликовано:

 

6 июл 2021

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 64   
@railsabbitovich408
@railsabbitovich408 2 года назад
Дружище , ты просто Педагог от бога, объяснил чётко, спокойно и без уныния. Респект)
@PythonRussian
@PythonRussian 2 года назад
спасибо, постараюсь и дальше без уныния продолжать=) особенно когда на ООП замахнемся.
@railsabbitovich408
@railsabbitovich408 2 года назад
@@PythonRussian Надеюсь на доступное обьяснение дескрипторов))ахах
@Feldspyt
@Feldspyt Месяц назад
Просто отличная подача материала!!!
@mgotovtsev
@mgotovtsev Год назад
Чёткий обзор! Я б добавил про дефолт дикт, что при создании можно туда впихнуть лямбда функцию и создавать по дефолту любой объект, например, ещё один дефолт дикт. Очень удобная штука. Помимо этого, есть вариант использовать стандартный метод словаря setdefault() кажется. Тогда условие не потребуется. Но приятнее работать с дефолтдикт.
@user-ee1lx1pe7n
@user-ee1lx1pe7n 2 года назад
Спасибо! Это очень крутой урок! Ты очень хороший педагог!!!
@PythonRussian
@PythonRussian 2 года назад
благодарю!
@danast3085
@danast3085 Год назад
Я редко пишу комменты, но ты просто лучший ! Спасибо тебе большое !
@PythonRussian
@PythonRussian Год назад
лучше писать комменты, так вы мотивируете авторов контента продолжать. Спасибо.
@korleone72
@korleone72 Год назад
очень понятно и доходчиво. спасибо большое
@s_merq
@s_merq 2 года назад
Спасибо, очень содержательное и крайне полезное видео!
@cucumber3332
@cucumber3332 2 года назад
Очень наглядные объяснения и примеры использования! Каждый раз думаю - "Что же я еще не трогал в питоне?" , а такие видео быстро ставят на место) Листы лучше очереди тем, что можно оперировать элементами из любой части массива, а не только с начала и конца?
@PythonRussian
@PythonRussian 2 года назад
да, список прост и актуален для обычных задач, он не потокобезопасен и долго вставляет например в самое начало (в отличие от очереди). В общем у каждой коллекции свое предназначение и фишки.
@TheHospicer
@TheHospicer 2 месяца назад
Спасибо, очень доступно и грамотно
@eldos704
@eldos704 2 года назад
Было бы интересно послушать про пакет itertools)
@PythonRussian
@PythonRussian 2 года назад
да, сделаем, только наверное по самым используемым функциям.
@blazedenshinobu
@blazedenshinobu Год назад
Спасибо за видео, очень полезно Лайк, подписка 100%
@im0767
@im0767 Год назад
Спасибо! Реально не знал, что так !
@y18kotov
@y18kotov Год назад
супер! спасибо
@user-fz9zg5gt4c
@user-fz9zg5gt4c Год назад
круто объясняешь все понятно но не хватает тайм-кодов
@artsemilapitski8258
@artsemilapitski8258 Год назад
супер!
@user-ez6lc2rg2q
@user-ez6lc2rg2q 2 года назад
Спасибо большое за полезную лекцию. Подскажите, пожалуйста, сочетание клавиш в пайчарме, чтобы провалиться в функцию/класс на 48:35?
@PythonRussian
@PythonRussian 2 года назад
контрол+клик мышкой по имени
@MrSmallChe
@MrSmallChe 2 года назад
может делать тайм-коды в таких, довольно больших, видео?....
@PythonRussian
@PythonRussian 2 года назад
да, пожалуй можно
@alexey9975
@alexey9975 2 месяца назад
>>>в чем преимущество списка перед deque из модуля collections языка python? Списки являются хорошим выбором, когда вам нужен простой и удобный способ хранения упорядоченных элементов и операций над ними, особенно если важен быстрый доступ к элементам по индексу и использование срезов.
@user-mt5bk6kf6l
@user-mt5bk6kf6l Год назад
Привет Очень информативный ролик, вопрос касательно метода counter, если в задаче наоборот нужно указать количество букв которые в строке появляются только один раз, а те которые больше 1 не должны учитываться, как можно увернуться с этим методом? Спасибо!
@PythonRussian
@PythonRussian Год назад
так получи каунтер и отфильтруй только те пары где 1.
@hopelesssuprem1867
@hopelesssuprem1867 2 года назад
Спасибо больше за классные видосы, не посоветуешь хорошие ресурсы по изучению ML?
@PythonRussian
@PythonRussian 2 года назад
не посоветую, просто не знаю. Знаю что для МЛ надо очень хорошо знать математику, на уровне вуза, с наскока дата-сатанизм не взять.
@hopelesssuprem1867
@hopelesssuprem1867 2 года назад
@@PythonRussian понял, спасибо)
@user-qx8kb7xx9x
@user-qx8kb7xx9x 2 года назад
Посмотрите канал selfedu.
@jamjam3337
@jamjam3337 Год назад
👏👍
@shinigami_yokoso
@shinigami_yokoso Год назад
dct = {} for char in "hello": dct.setdefault(char, []).append(char) print(dct) Как альтернатива defaultdict
@ilya2742
@ilya2742 8 месяцев назад
Хорошее видео, возможно лучшее, что можно найти. Но меня мучает вопрос связанный с ChainMap.Допустим у нас 5 словарей, и key in chain нам вывело True.Но как нам узнать в каком именно из этих словарей находится нужный нам ключ?
@PythonRussian
@PythonRussian 7 месяцев назад
никак, проверить в каждом, благо это очень быстра операция
@fedordostoevskiy4209
@fedordostoevskiy4209 Год назад
👍, самый ленивый яп.
@PythonRussian
@PythonRussian Год назад
не, есть еще ленивее - Хаскелл
@user-nx7cq1wy3f
@user-nx7cq1wy3f 2 года назад
добрый день. а чем тогда отличается get от defaultdict ?
@PythonRussian
@PythonRussian 2 года назад
первое это только метод, который придется прописывать всегда для получения нужного эффекта. второе -коллекция которая явно говорит читающему что при обращении к несуществующему ключу нечто произойдет.
@neydygdrg1836
@neydygdrg1836 2 месяца назад
Привет, все актуально до сих пор? И хотел спросить обновляються ли встроенные модули по типу collections, datetime и тп?
@PythonRussian
@PythonRussian 2 месяца назад
да, все актуально, а по обновлениям бывают обычно ускорения, оптимизации. Правки-редкость, но их видно в документации
@neydygdrg1836
@neydygdrg1836 2 месяца назад
@@PythonRussian Спасибо вашему каналу! Очень много интересных тем
@user-nb2zf3lk7j
@user-nb2zf3lk7j 2 года назад
45:48 опечатка
@PythonRussian
@PythonRussian 2 года назад
это бывает, не суди строго, я и оговариваюсь довольно часто
@user-pg8ry1tm3t
@user-pg8ry1tm3t 3 месяца назад
А есть ли какой-нибудь тип из коробки с деревом под капотом?..
@PythonRussian
@PythonRussian 3 месяца назад
честно говоря не знаю, не удивлюсь если нет
@user-pg8ry1tm3t
@user-pg8ry1tm3t 3 месяца назад
@@PythonRussian вот приспичило файловое хранилище расписать, думал мб есть что из коробки, видимо придётся самописное решение накатать
@mgotovtsev
@mgotovtsev Год назад
Я б назвал не file переменную при открытии в менеджере контекста, а что-то типа fileCsv, т.к. file это вроде ключевое слово. Но могу ошибаться. Для урока это наверное неважно. Важно на практике так не делать.
@PythonRussian
@PythonRussian Год назад
если бы было ключевое то код бы не сработал, ты не можешь ключевыми словами называть переменные например in или for
@mgotovtsev
@mgotovtsev Год назад
@@PythonRussian да, точно. Там есть тип файл объект. Вот что меня смутило.
@Alcoholdehydrogenas
@Alcoholdehydrogenas Месяц назад
namedtuple похож на датакласс
@SemyonKalyakulin
@SemyonKalyakulin 2 года назад
Просканировал 1 том "Войны и мира" и получил следующие результаты по количеству вхождений: Из всех слов: 1) "и": 4657 2) "в": 2166 3) "не": 1871 4) "на": 1524 5) "что": 1491 Из нормальных слов: 1) "сказал": 566 2) "было": 489 3) "князь": 417 4) "был": 364 5) "Андрей": 294
@SemyonKalyakulin
@SemyonKalyakulin 2 года назад
Есть, конечно, шанс, что я где-то косякнул, но словарь получился гигантским)
@SemyonKalyakulin
@SemyonKalyakulin 2 года назад
Код, кому интересено: import string from collections import Counter with open("book.txt", "r") as book: lines = [line for line in book.readlines() if line != " "] print(lines[0:2]) words = ( word for line in lines for word in str(line.translate(str.maketrans('', '', string.punctuation))).replace("-", "").split() ) words_rating = Counter(words) print(words_rating) Избавление строки от пунктуации скоммуниздил с какого-то форума)
@PythonRussian
@PythonRussian 2 года назад
красава, респект
@user-qw2wq6hh4h
@user-qw2wq6hh4h Год назад
@@PythonRussian получил список слов из текста при помощи регулярки из модуля re, при помощи counter получил 5 самых частых слов- сплошные служебные:)) "и", "из", "в" и т.д. Пошел немного дальше. Загрузил список стоп-слов при помощи библиотеки nltk и перебрав их в цикле удалил этот мусор из общего списка слов, а затем уже вывел список из 5 самых частых слов - print(counter.most_common(5)). Не знаю, может можно было лучше сделать, но у меня получилось. Похвастался:)))
@PythonRussian
@PythonRussian Год назад
@@user-qw2wq6hh4h красава!
@user-zr1sj3dr5w
@user-zr1sj3dr5w 2 месяца назад
Слово "его" встретилось: 9149 раз Слово "что" встретилось: 6240 раз Слово "как" встретилось: 4331 раз Слово "сказал" встретилось: 3765 раз Слово "господь" встретилось: 3637 раз 🤔
@Dima7100
@Dima7100 2 года назад
При написании простеньких ботов я получал объект message от телеграма и при его изучении он выводил мне типа: "Message(id=62537, peer_id=PeerChannel(channel_id=1754884971), date=datetime.datetime(2022, 1, 31, 18, 29, 52, tzinfo=datetime.timezone.utc), message='за бесплатно и бесценный опыт же)'", я все не мог понять, что это вообще такое, вроде и не словарь, но как словарь, и обращаться можно по атрибутам, но при обращении к PeerChannel (типа PeerChannel[0] или peer_id.PeerChannel) писал, что не знает такого атрибута. Как обращаться к нужным элементам я понял эмпирически, но в чате питонистов стеснялся спросить, что это за тип данных, так как мне казалось, что это нечто элементарное и это как спросить: "А как получить элемент из списка?". И вот спустя почти год нахожу ответ здесь. Спасибо! Во всех видео, что у тебя есть, где я уже знал теорию, я узнавал что-то новенькое. А deque нельзя нарезать, как список.
@user-yv9kg9gt5h
@user-yv9kg9gt5h Год назад
Нарезать ? Не понял просто)
Далее
Замыкания (Closures) в Python
30:54
Просмотров 14 тыс.
Правила хорошей функции в Python
41:58
The Python collections module is OVERPOWERED
10:53
Просмотров 11 тыс.
Что за звери *args и **kwargs
38:02
Просмотров 7 тыс.