Что такое Лямбда-выражения в Python и как они работают
Лямбда-выражения — это короткий способ создать безымянные функции прямо в месте их использования. Они полезны, когда вам нужна простая функция для одноразового использования, и вы не хотите определять её через стандартный синтаксис
Они имеют простой и компактный синтаксис:
Примеры использования:
1. Простая лямбда-функция
Рассмотрим пример лямбда-выражения, которое складывает два числа:
2. Лямбда с функцией
Функция
3. Лямбда с функцией
Функция
4. Лямбда с функцией
Лямбда-выражение можно использовать для сортировки сложных структур данных, таких как списки кортежей:
Лямбда-выражения часто используются как ключевые функции в методах сортировки, нахождения максимума/минимума и других высокоуровневых операций:
Стоит учитывать, что лямбда-выражения имеют некоторые ограничения:
— они могут содержать только одно выражение;
— их сложно отлаживать, так как они не имеют имени и часто используются на месте;
— использование на месте иногда может ухудшить читаемость кода.
Преимущества:
— компактность и простота;
— идеально подходят для одноразовых функций;
— хорошо интегрируются с функциями высшего порядка, такими как
Недостатки:
— если используются неуместно, могут ухудшить читаемость кода;
— не подходят для сложных логик.
#простымисловами
Лямбда-выражения — это короткий способ создать безымянные функции прямо в месте их использования. Они полезны, когда вам нужна простая функция для одноразового использования, и вы не хотите определять её через стандартный синтаксис
def
.Они имеют простой и компактный синтаксис:
lambda аргументы: выражение
Примеры использования:
1. Простая лямбда-функция
Рассмотрим пример лямбда-выражения, которое складывает два числа:
add = lambda x, y: x + y
print(add(2, 3)) # Результат: 5
2. Лямбда с функцией
map
:Функция
map
применяет лямбда-выражение ко всем элементам в списке:numbers = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, numbers))
print(squares) # Результат: [1, 4, 9, 16]
3. Лямбда с функцией
filter
:Функция
filter
использует лямбда-выражение для фильтрации элементов списка:numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # Результат: [2, 4, 6]
4. Лямбда с функцией
sorted
:Лямбда-выражение можно использовать для сортировки сложных структур данных, таких как списки кортежей:
students = [("Alice", 25), ("Bob", 20), ("Charlie", 23)]
sorted_students = sorted(students, key=lambda student: student[1])
print(sorted_students) # Результат: [('Bob', 20), ('Charlie', 23), ('Alice', 25)]
Лямбда-выражения часто используются как ключевые функции в методах сортировки, нахождения максимума/минимума и других высокоуровневых операций:
# Сортировка списка строк по их длине
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=lambda word: len(word))
print(sorted_words) # Результат: ['date', 'apple', 'banana', 'cherry']
Стоит учитывать, что лямбда-выражения имеют некоторые ограничения:
— они могут содержать только одно выражение;
— их сложно отлаживать, так как они не имеют имени и часто используются на месте;
— использование на месте иногда может ухудшить читаемость кода.
Преимущества:
— компактность и простота;
— идеально подходят для одноразовых функций;
— хорошо интегрируются с функциями высшего порядка, такими как
map
, filter
и sorted
.Недостатки:
— если используются неуместно, могут ухудшить читаемость кода;
— не подходят для сложных логик.
#простымисловами
⚡7❤1
Шпаргалка для всех, кто только начинает изучать Python
Начался новый учебный год. И даже если вы уже окончили школу или универ, получать новые знания никогда не поздно.
Мы собрали для вас небольшую шпаргалку-roadmap, которая поможет вам сориентироваться в мире программирования и понять куда двигаться дальше.
#шпаргалка #roadmap
Начался новый учебный год. И даже если вы уже окончили школу или универ, получать новые знания никогда не поздно.
Мы собрали для вас небольшую шпаргалку-roadmap, которая поможет вам сориентироваться в мире программирования и понять куда двигаться дальше.
#шпаргалка #roadmap
👍10
Forwarded from Нейроканал
Юный Михаил Шуфутинский тоже был с компьютером на ты. Сегодня, 3-го сентября, он ждет ваших фотографий в комментариях, чтобы состарить их через нейронки.
#кек
@neuro_channel
#кек
@neuro_channel
😁5👎4🥱1
Media is too big
VIEW IN TELEGRAM
«Я 10 лет писал на Python, и вот что я думаю»
Лёша Корепанов поделился своим мнением о разработке на Python, опираясь на свой 10-летний опыт. Получилось интересно и ёмко.
Согласны с ним?
#видео
Лёша Корепанов поделился своим мнением о разработке на Python, опираясь на свой 10-летний опыт. Получилось интересно и ёмко.
Согласны с ним?
#видео
👍9
Telegram Mini App. Как создать Web App с нуля
Mini Apps (или же Web Apps) — это относительно новый и удобный способ добавления веб приложения прямо в интерфейсе Telegram. Сегодня, когда в мессенджере появился свой магазин приложений, это стало особоенно актуально.
Особенность Mini Apps заключается в том, что они поддерживают авторизацию, платежи одной кнопкой и возможность работать с данными пользователя, открывшего мини-приложение.
В этом гайде вы научитесь создавать приложения, которые могут взаимодействовать с данными пользователя и разворачивать бота вместе с сайтом в облаке:
https://habr.com/ru/companies/amvera/articles/838180/
#бот #telegram #web
Mini Apps (или же Web Apps) — это относительно новый и удобный способ добавления веб приложения прямо в интерфейсе Telegram. Сегодня, когда в мессенджере появился свой магазин приложений, это стало особоенно актуально.
Особенность Mini Apps заключается в том, что они поддерживают авторизацию, платежи одной кнопкой и возможность работать с данными пользователя, открывшего мини-приложение.
В этом гайде вы научитесь создавать приложения, которые могут взаимодействовать с данными пользователя и разворачивать бота вместе с сайтом в облаке:
https://habr.com/ru/companies/amvera/articles/838180/
#бот #telegram #web
❤8🔥4👍1
Простыми словами: Бинарное дерево поиска
Бинарное дерево поиска (Binary Search Tree, или просто BST) — это структура данных, которая помогает легко и быстро находить, добавлять и удалять элементы. Давайте разберёмся, что это такое и как с ним работать, на простых примерах.
Представьте себе дерево. У каждого узла в этом дереве есть:
— значение (например, число);
— ссылка на левую «веточку» (левого ребенка);
— ссылка на правую «веточку» (правого ребенка).
Правило у этого дерева такое:
— все значения в левом поддереве меньше, чем значение в узле;
— все значения в правом поддереве больше, чем значение в узле.
Простейшие операции с BST
Вставка элемента
Если вы хотите добавить элемент в дерево, вы начинаете с самого верха. Сравниваете новое значение с корнем:
— если оно меньше, переходите влево;
— если больше, переходите вправо;
— повторяете, пока не найдете пустую коробочку (место), и вы поместите туда новое значение.
Поиск элемента
Когда вы хотите найти элемент, вы снова начинаете с корня и сравниваете:
— если нашли — отлично, элемент найден!
— если меньше, идете налево.
— если больше, идете направо.
Повторяете, пока не найдете элемент или не убедитесь, что его нет в дереве.
Удаление элемента
Удаление элемента немного сложнее, потому что есть три варианта:
— элемент — это лист (нет детей). Просто удаляем его;
— элемент имеет одного ребенка. Тогда просто заменяем его этим ребенком;
— элемент имеет двух детей. В этом случае мы находим минимальный элемент в правом поддереве и заменяем удаляемый элемент на него.
Обход дерева
Обход означает посещение всех узлов в дереве. Существует несколько способов делать это:
1. In-order (Левый-Корень-Правый): посещаем сначала левое поддерево, потом текущий узел, потом правое поддерево.
2. Pre-order (Корень-Левый-Правый): посещаем сначала текущий узел, потом левое поддерево, потом правое поддерево.
3. Post-order (Левый-Правый-Корень): посещаем сначала левое поддерево, потом правое поддерево, потом текущий узел.
Пример in-order обхода:
Давайте резюмируем. Бинарное дерево поиска — это отличный инструмент для быстрого и эффективного управления данными. С его помощью легко найти, добавить или удалить элемент, благодаря чёткой структуре и правилам. Теперь, когда вы знаете, что оно из себя представляет, сможете без труда использовать его в своих проектах
#простымисловами #bst
Бинарное дерево поиска (Binary Search Tree, или просто BST) — это структура данных, которая помогает легко и быстро находить, добавлять и удалять элементы. Давайте разберёмся, что это такое и как с ним работать, на простых примерах.
Представьте себе дерево. У каждого узла в этом дереве есть:
— значение (например, число);
— ссылка на левую «веточку» (левого ребенка);
— ссылка на правую «веточку» (правого ребенка).
Правило у этого дерева такое:
— все значения в левом поддереве меньше, чем значение в узле;
— все значения в правом поддереве больше, чем значение в узле.
Простейшие операции с BST
Вставка элемента
Если вы хотите добавить элемент в дерево, вы начинаете с самого верха. Сравниваете новое значение с корнем:
— если оно меньше, переходите влево;
— если больше, переходите вправо;
— повторяете, пока не найдете пустую коробочку (место), и вы поместите туда новое значение.
class Node:
def __init__(self, key):
self.key = key
self.left = None
self.right = None
def insert(root, key):
if root is None:
return Node(key)
if key < root.key:
root.left = insert(root.left, key)
else:
root.right = insert(root.right, key)
return root
Поиск элемента
Когда вы хотите найти элемент, вы снова начинаете с корня и сравниваете:
— если нашли — отлично, элемент найден!
— если меньше, идете налево.
— если больше, идете направо.
Повторяете, пока не найдете элемент или не убедитесь, что его нет в дереве.
def search(root, key):
if root is None or root.key == key:
return root
if key < root.key:
return search(root.left, key)
return search(root.right, key)
Удаление элемента
Удаление элемента немного сложнее, потому что есть три варианта:
— элемент — это лист (нет детей). Просто удаляем его;
— элемент имеет одного ребенка. Тогда просто заменяем его этим ребенком;
— элемент имеет двух детей. В этом случае мы находим минимальный элемент в правом поддереве и заменяем удаляемый элемент на него.
def deleteNode(root, key):
if root is None:
return root
if key < root.key:
root.left = deleteNode(root.left, key)
elif key > root.key:
root.right = deleteNode(root.right, key)
else:
if root.left is None:
return root.right
elif root.right is None:
return root.left
temp = minValueNode(root.right)
root.key = temp.key
root.right = deleteNode(root.right, temp.key)
return root
def minValueNode(node):
current = node
while current.left is not None:
current = current.left
return current
Обход дерева
Обход означает посещение всех узлов в дереве. Существует несколько способов делать это:
1. In-order (Левый-Корень-Правый): посещаем сначала левое поддерево, потом текущий узел, потом правое поддерево.
2. Pre-order (Корень-Левый-Правый): посещаем сначала текущий узел, потом левое поддерево, потом правое поддерево.
3. Post-order (Левый-Правый-Корень): посещаем сначала левое поддерево, потом правое поддерево, потом текущий узел.
Пример in-order обхода:
def inorder(root):
if root:
inorder(root.left)
print(root.key, end=' ')
inorder(root.right)
Давайте резюмируем. Бинарное дерево поиска — это отличный инструмент для быстрого и эффективного управления данными. С его помощью легко найти, добавить или удалить элемент, благодаря чёткой структуре и правилам. Теперь, когда вы знаете, что оно из себя представляет, сможете без труда использовать его в своих проектах
#простымисловами #bst
👍5❤🔥1
Forwarded from MaaS — meme as a service (ex. Представляешь, )
встречайте — Bython!
Это проект, который заменяет все отступы в Python на фигурные скобки. Больше не нужно о них париться — если накосячите с табами и пробелами или перенесете кусок кода с другим стилем отступов, то ничего не сломается.
Если вам по каким-то причинам это надо, то ищите проект здесь.
@your_tech
Это проект, который заменяет все отступы в Python на фигурные скобки. Больше не нужно о них париться — если накосячите с табами и пробелами или перенесете кусок кода с другим стилем отступов, то ничего не сломается.
Если вам по каким-то причинам это надо, то ищите проект здесь.
@your_tech
🤯18🗿12😐4💊4🤷2
Давайте проверим ваши знания работы бинарного дерева поиска. Посмотрите на изображение и ответьте на вопрос ниже.
#викторина #bst
#викторина #bst
Что произойдет при добавлении узла со значением 25 в бинарное дерево поиска (BST) на изображении выше?
Anonymous Quiz
9%
Узел 25 добавится справа от узла 20
4%
Узел 25 добавится слева от узла 20
72%
Узел 25 не будет добавлен, так как уже существует
5%
Узел 25 добавится справа от узла 10
10%
Узел 25 не будет добавлен, так как справа от числа 20 уже есть число 40
Головоломка «Сапёр» на Python в 66 строк и её решение вероятностным алгоритмом
Автор статьи поставил себе задачу написать менее чем за 100 строк полноценную игру «сапёр». У него получилось уложиться в 66 строк, сделав игру, которая работает в консоли.
Посмотреть на реализацию можно в статье: https://habr.com/ru/articles/833494/
#gamedev
Смогли бы написать ещё короче?
Автор статьи поставил себе задачу написать менее чем за 100 строк полноценную игру «сапёр». У него получилось уложиться в 66 строк, сделав игру, которая работает в консоли.
Посмотреть на реализацию можно в статье: https://habr.com/ru/articles/833494/
#gamedev
Смогли бы написать ещё короче?
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Простой Python-скрипт + ИИ = оптимизация ваших рабочих процессов
Формула простая, как и этот туториал, после которого вы сможете использовать голосовой ввод с автоматической транскрибацией речи в текст в любом поле ввода на вашем компьютере. Важной особенностью скрипта будет его работа в фоне и автоматический вызов голосом по необходимости.
«Галя, у нас отмена» — и можно начинать курсач с чистого листа. Попробуете?
#гайд #ии #интересное
Формула простая, как и этот туториал, после которого вы сможете использовать голосовой ввод с автоматической транскрибацией речи в текст в любом поле ввода на вашем компьютере. Важной особенностью скрипта будет его работа в фоне и автоматический вызов голосом по необходимости.
«Галя, у нас отмена» — и можно начинать курсач с чистого листа. Попробуете?
#гайд #ии #интересное
👎2👍1
Как оптимизации в CPython повлияли на скорость работы Python
Автор твита на картинке заметил странное поведение Python. Когда он вызывал встроенную функцию min, производительность кода была ниже, чем если реализованный метод в самом коде.
Да, его код был написан ещё на Python 2. Сейчас ситуация стала гораздо лучше. Но почему? Автор этой статьи провёл несколько бенчмарков и поделился выводами:
https://habr.com/ru/companies/beget/articles/839348/
Автор твита на картинке заметил странное поведение Python. Когда он вызывал встроенную функцию min, производительность кода была ниже, чем если реализованный метод в самом коде.
Да, его код был написан ещё на Python 2. Сейчас ситуация стала гораздо лучше. Но почему? Автор этой статьи провёл несколько бенчмарков и поделился выводами:
https://habr.com/ru/companies/beget/articles/839348/
✍2🥱2❤1😁1
Forwarded from Метод утёнка
This media is not supported in your browser
VIEW IN TELEGRAM
Toolfolio — все нужные инструменты для ИИ и не только в одном месте
Берите на заметку и не теряйте этот сервис. Здесь собраны полезные нейронки под любую задачу, куча бесплатных аналогов популярных программ, а также целые библиотеки плагинов для ваших любимых сервисов.
#инструменты
Берите на заметку и не теряйте этот сервис. Здесь собраны полезные нейронки под любую задачу, куча бесплатных аналогов популярных программ, а также целые библиотеки плагинов для ваших любимых сервисов.
#инструменты
Простыми словами: B-дерево
В прошлом посте я рассказывал про бинарное дерево поиска. Теперь давайте разберём ещё одну популярную структуру данных.
B-дерево (B-tree) — это самобалансирующаяся структура данных, которая хранит данные в отсортированном виде, позволяя эффективно выполнять операции поиска, вставки и удаления. B-деревья часто используются в системах хранения данных, таких как базы данных и файловые системы, благодаря своей способности справляться с большими объемами данных и минимизировать количество операций чтения/записи на диске.
Структура B-дерева выглядит следующим образом:
1. Корень дерева: он содержит указатели на свои дочерние узлы.
2. Внутренние узлы: эти узлы содержат ключи и указатели на другие узлы дерева.
3. Листовые узлы: узлы на самом нижнем уровне дерева, которые содержат сами данные или указывают на них.
Каждый узел в B-дереве может содержать множество ключей и дочерних указателей, что позволяет дереву быть плоским и широким, а не высоким и узким.
Как я уже сказал, B-tree похожа на BST, но имеет ряд ключевых отличий:
Количество ключей в узле:
BST: Каждый узел содержит только один ключ и два дочерних узла (левого и правого).
B-tree: Каждый узел может содержать несколько ключей и производить разветвление на большее количество дочерних узлов (определяется порядком дерева).
Балансировка:
BST: Может стать несбалансированным, что приводит к увеличению высоты дерева и замедляет операции поиска.
B-tree: Остается сбалансированным благодаря встроенному механизму балансировки при вставке и удалении элементов.
Высота дерева:
BST: Может быть оправдано большой, так как каждый узел содержит только один ключ.
B-tree: Значительно меньше и площе, благодаря множеству ключей в одном узле.
Производительность при работе с большими данными:
BST: Из-за потенциально большой высоты дерева может потребоваться множество операций для поиска элемента.
B-tree: Более плоская структура минимизирует количество операций ввода-вывода, что особенно полезно при работе с внешней памятью и большими объемами данных.
В связи с этим можно выделить следующие преимущества B-дерева:
1. Более оптимизированное хранение больших объемов данных.
2. Автоматическая балансировка.
3. Эффективный доступ к данным благодаря низкой высоте дерева и множеству ключей в узлах.
Но где же применяется такая структура данных? Вот несколько примеров:
1. Базы данных. B-деревья широко используются в реляционных базах данных (MySQL, PostgreSQL) для реализации индексов, что позволяет эффективно выполнять операции поиска, вставки и удаления данных.
2. Файловые системы. Файловые системы, такие как NTFS и ext4, используют B-деревья для организации и управления файлами на диске, обеспечивая быструю навигацию и доступ.
Кэширование данных : Используются для быстрого доступа к часто запрашиваемым данным, улучшая производительность приложений.
Теперь вы знаете о ещё одном способе хранения данных. Какой вам кажется более удобным?
#простымисловами #структураданных #btree
В прошлом посте я рассказывал про бинарное дерево поиска. Теперь давайте разберём ещё одну популярную структуру данных.
B-дерево (B-tree) — это самобалансирующаяся структура данных, которая хранит данные в отсортированном виде, позволяя эффективно выполнять операции поиска, вставки и удаления. B-деревья часто используются в системах хранения данных, таких как базы данных и файловые системы, благодаря своей способности справляться с большими объемами данных и минимизировать количество операций чтения/записи на диске.
Структура B-дерева выглядит следующим образом:
1. Корень дерева: он содержит указатели на свои дочерние узлы.
2. Внутренние узлы: эти узлы содержат ключи и указатели на другие узлы дерева.
3. Листовые узлы: узлы на самом нижнем уровне дерева, которые содержат сами данные или указывают на них.
//пример бинарного дерева
[10, 20]
/ | \
[1, 2, 5] [15, 18] [25, 30, 35]
Каждый узел в B-дереве может содержать множество ключей и дочерних указателей, что позволяет дереву быть плоским и широким, а не высоким и узким.
Как я уже сказал, B-tree похожа на BST, но имеет ряд ключевых отличий:
Количество ключей в узле:
BST: Каждый узел содержит только один ключ и два дочерних узла (левого и правого).
B-tree: Каждый узел может содержать несколько ключей и производить разветвление на большее количество дочерних узлов (определяется порядком дерева).
Балансировка:
BST: Может стать несбалансированным, что приводит к увеличению высоты дерева и замедляет операции поиска.
B-tree: Остается сбалансированным благодаря встроенному механизму балансировки при вставке и удалении элементов.
Высота дерева:
BST: Может быть оправдано большой, так как каждый узел содержит только один ключ.
B-tree: Значительно меньше и площе, благодаря множеству ключей в одном узле.
Производительность при работе с большими данными:
BST: Из-за потенциально большой высоты дерева может потребоваться множество операций для поиска элемента.
B-tree: Более плоская структура минимизирует количество операций ввода-вывода, что особенно полезно при работе с внешней памятью и большими объемами данных.
В связи с этим можно выделить следующие преимущества B-дерева:
1. Более оптимизированное хранение больших объемов данных.
2. Автоматическая балансировка.
3. Эффективный доступ к данным благодаря низкой высоте дерева и множеству ключей в узлах.
Но где же применяется такая структура данных? Вот несколько примеров:
1. Базы данных. B-деревья широко используются в реляционных базах данных (MySQL, PostgreSQL) для реализации индексов, что позволяет эффективно выполнять операции поиска, вставки и удаления данных.
2. Файловые системы. Файловые системы, такие как NTFS и ext4, используют B-деревья для организации и управления файлами на диске, обеспечивая быструю навигацию и доступ.
Кэширование данных : Используются для быстрого доступа к часто запрашиваемым данным, улучшая производительность приложений.
Теперь вы знаете о ещё одном способе хранения данных. Какой вам кажется более удобным?
#простымисловами #структураданных #btree
👍10❤1