Циклический сдвиг — это когда каждая итерация цикла перемещает первый элемент списка в конец, а все остальные элементы сдвигает на минус один индекс. Есть два способа сделать это.
С созданием копии списка:
my_list = [1, 5, 2, 4, 3]
new_list = my_list[:]
for i in range(len(my_list)):
my_list = new_list[i:] + new_list[:i]
Без копии:
my_list = [1, 5, 2, 4, 3]
for _ in range(len(my_list)):
my_list.append(my_list[0])
my_list.pop(0)
Выбор способа зависит от задачи.
———
Good coding
#python #short #list
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Помните такие конструкции в детских играх или в каких-то туториалах, когда нужно соединить линией элементы, которые подходят друг другу по каким-либо свойствам? Например в левом столбике названия цветов, а в правом их обозначения. Скорее всего, некоторые линии объединенных элементов будут пересекаться. На основании этого описания, представим два списка:
a = [5, 4, 1, 3, 2]
b = [1, 3, 2, 5, 4]
Соедините мысленно все одинаковые числа линиями. Как с помощью python посчитать количество пересечений?
Рассмотрим функцию
find_intersections
def find_intersections(left_side, right_side):
num_fields = len(left_side)
intersections = 0
right_indices = {right_side[i]: i for i in range(num_fields)}
for i in range(num_fields):
for j in range(i + 1, num_fields):
left_cow_a = left_side[i]
left_cow_b = left_side[j]
right_cow_a = right_indices[left_cow_a]
right_cow_b = right_indices[left_cow_b]
if right_cow_a > right_cow_b:
intersections += 1
return intersections
Функция
find_intersections
подсчитывает количество "пересечений" между элементами двух списков — left_side
и right_side
.Пересечение — это такая ситуация, когда два элемента в одном списке расположены в одном порядке, а в другом — в обратном.
1. Инициализация переменных:
•
num_fields
— количество элементов в списках (они одинаковой длины).•
intersections
— счетчик пересечений, инициализируется нулем.2. Создание словаря индексов:
•
right_indices
— это словарь, где каждому элементу из списка right_side
сопоставляется его индекс. Это нужно, чтобы быстро находить позиции элементов из right_side
.3. Два вложенных цикла для перебора пар элементов:
• Внешний цикл (
for i in range(num_fields)
) перебирает каждый элемент списка left_side
как первый элемент пары.• Внутренний цикл (
for j in range(i + 1, num_fields)
) перебирает каждый следующий элемент списка как второй элемент пары.4. Сравнение порядков элементов в списках:
• Для текущей пары элементов
left_cow_a
(из left_side[i]
) и left_cow_b
(из left_side[j]
), находятся их индексы в right_side
с помощью словаря right_indices
: это right_cow_a
и right_cow_b
.• Если в
right_side
первый элемент пары (right_cow_a
) находится позже второго (right_cow_b
), то это пересечение, и счетчик intersections
увеличивается на 1.5. Результат:
• Функция возвращает общее количество пересечений.
Пример: Если:
•
left_side = [1, 2, 3]
•
right_side = [2, 1, 3]
• То пересечение будет между 1 и 2, так как их порядок в
right_side
обратен порядку в left_side
.———
Good coding
#python #info #list #matrix #algorithm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2 1 1
Если для хранения данных не требуется сохранения порядка и дубликатов элементов, можно использовать множества вместо списков. Чем длиннее список элементов и чем дальше элемент поиска, тем больше преимуществ у множества.
Давайте убедимся на деле:
import time, random
# Генерируем список с дубликатами и преобразуем в множество
numbers_list = [random.randint(0, 10**6) for _ in range(10**6)]
numbers_set = set(numbers_list)
# Список случайных элементов для поиска
search_items = random.sample(range(10**6), 1000)
# Функция для замера времени поиска
def measure_search(container):
start = time.time()
for item in search_items:
item in container
return time.time() - start
# Замеры времени поиска
list_time = measure_search(numbers_list)
set_time = measure_search(numbers_set)
# Результаты
print(f"Поиск в списке: {list_time:.6f} сек") # Примерно 4.3 сек
print(f"Поиск в множестве: {set_time:.6f} сек") # Примерно 0.0009 сек
———
Good coding
#python #short #list #set
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2 1
Предположим, что наше приложение — это что-то там связанное с английским. У нас есть некоторый словарь в котором ключ — это английское слово, а значение — перевод этого слова:
animals = {
'cat': 'кот',
'dog': 'собака',
'mouse': 'мышь',
'elephant': 'слон',
}
Нам нужно чтобы было наоборот: ключи на русском, а значения на английском. Пишем простое выражение:
print({value: key for key, value in animals.items()})
# >>> {'кот': 'cat', 'собака': 'dog', 'мышь': 'mouse', 'слон': 'elephant'}
———
Good coding
#python #short #dict
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Допустим вам для проекта нужно сгенерировать английский алфавит.
alphabet = {chr(i): i - 64 for i in range(65, 91)}
Эта строчка генерирует словарь с прописными буквами английского алфавита.
Функция chr() конвертирует целое число в Unicode-символ и возвращает его.
Юникод и кодировки в Python
———
Good coding
#python #short #dict #unicode
Please open Telegram to view this post
VIEW IN TELEGRAM
Ravesli
Функция chr() в Python / Ravesli
❤2👍1 1
С помощью метода reverse()
my_position = ['first', 'second', 'third']
my_position.reverse()
print(my_position)
# >>> ['third', 'second', 'first']
С помощью функции reversed()
sequence = [1, 2, 3, 4, 5, 6]
reverse_sequence = list(reversed(sequence))
print(reverse_sequence)
# >>> [6, 5, 4, 3, 2, 1]
С помощью среза
split_name = ['r', 'd', 'n', 'a', 's', 'k', 'e', 'l', 'a']
reverse_split_name = split_name[::-1]
print(reverse_split_name)
# >>> ['a', 'l', 'e', 'k', 's', 'a', 'n', 'd', 'r']
———
Good coding
#python #short #list
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2 1
Класс
deque
(от "double-ended queue" - двухсторонняя очередь) в Python удобен для работы с коллекцией элементов, где важны операции добавления и удаления элементов в начале и в конце списка. Обычные списки делают это медленно, так как элементы приходится смещать, а deque
оптимизирован под такие операции, выполняя их за O(1).from collections import deque
# Создаем deque и добавляем элементы
queue = deque([1, 2, 3])
queue.append(4) # добавляет 4 в конец
queue.appendleft(0) # добавляет 0 в начало
print(queue) # deque([0, 1, 2, 3, 4])
# Удаляем элементы
queue.pop() # удаляет последний элемент
queue.popleft() # удаляет первый элемент
print(queue) # deque([1, 2, 3])
———
Good coding
#python #short #list #libraries #deque #collections
Please open Telegram to view this post
VIEW IN TELEGRAM
Я славно поработал и написал 2 статьи посвященные алгоритму BFS (поиск в ширину) и алгоритму Дейкстры (поиск во взвешенных графах). Для меня лучший способ в чем то разобраться - это объяснить другим как это работает. Эти работы не исключение.
Краткая статистика
- 25 000 символов
- 3 600 слов
- 23 часа работы
———
Первая часть - Алгоритмы поиска путей на пальцах. Часть 1: Поиск в ширину
Первая часть - Алгоритмы поиска путей на пальцах. Часть 2: Алгоритм Дейкстры
———
Это всё что я использовал для написания материала и создания анимаций:
1. Алгоритмика — много материала об алгоритмах
2. Clippa — здесь можно доработать гифки
3. ChatGPT — все знают
4. Program4you — здесь можно создавать и анимировать графы
5. Теория графов — хороший материал для прочной базы
6. Двусторонняя очередь — статья о классе deque
7. Кучи и приоритетные очереди — статья о модуле heapq
———
Good coding
#python #info #algorithms #dijkstra #bfs #graphs #habr #articles
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Алгоритмы поиска путей на пальцах. Часть 1: Поиск в ширину
Давайте представим, что вы устроились много лет назад в 2GIS и вам выпала честь написать алгоритм, который будет прокладывать самый короткий автомобильный маршрут от точки A к точке B. Вы...
Когда самостоятельно изучаешь программирование, в какой-то момент сталкиваешься с кризисом, когда нужно двигаться дальше, а что конкретно делать не понятно.
Эта книга будет хорошим продолжением, если вы только закончили изучение базового синтаксиса и хотели бы повторить и закрепить материал.
Автор книги изложил материал следующим образом:
1. Каждая глава начинается с урока. Не расстраивайтесь если вы уже знакомы с материалом. Каждый учитель объясняет по своему и всегда есть возможность узнать что то новое.
2. После каждого урока автор подробно разбирает несколько задач (2 - 3). Советую сначала пробовать решать их самостоятельно, а потом сверяться с решением автора.
3. В конце каждой главы приведен список задач, которые вы сможете решить усвоив материал из пройденного урока.
———
Книга на Яндекс Книгах — здесь
Купить бумажную версию — здесь
Английская версия бесплатно — здесь
Русская версия бесплатно — здесь
———
Также оставлю свой репазиторий с решенными задачами. Их около 100 там. Сверяйтесь и изучайте, но не списывайте.
Репозиторий
———
#python #book #problems
Please open Telegram to view this post
VIEW IN TELEGRAM
books.yandex.ru
Читать «Python без проблем: решаем реальные задачи и пишем полезный код». Зингаро Д. в Яндекс Книгах
«Python без проблем: решаем реальные задачи и пишем полезный код» Зингаро Д. читать полную версию книги на сайте или в приложении электронной онлайн библиотеки Яндекс Книги.
Если вы вдруг решили написать в том или ином виде генератор паролей/токенов или других случайных значений, имеющих высокие требования к безопасности, не идите очивидным путем и не используйте модуль
random
.Используйте модуль
secrets
. Почуму? Если коротко, то random
создан для симуляции, а результат работы довольно предсказуем. А secrets
используется для генерации криптографически надёжных случайных чисел.Короткое объяснение — тут
Документаци — тут
———
#python #secrets #random
Please open Telegram to view this post
VIEW IN TELEGRAM
blog.mnislam.dev
Random or Secrets which module to use for critical information?
Random module vs Secrets module for security in python
Моя подборка, которая поможет, как мне кажется, найти работу в сфере аналитики данных. Я сейчас сам всё это изучаю. Базовый Python уже понятен, нужно было выбирать направление для роста.
1. Актуальный, англоязычный курс — FREE Data Analyst Bootcamp. Если плохо с английским, открывайте плейлист в Яндекс браузере и слушайте в переводе.
2. Подробная карта для изучения инструментов связанных с аналитикой данных — Data Analyst Roadmap
3. Репозиторий с большой подборкой общедоступных наборов данных — awesome-public-datasets
4. Статья на Хабр с подборкой наборов данных - 52 датасета для тренировочных проектов
5. Сайт с большим количество датасетов — kaggle-datasets
———
#python #resources #datasets #data_analyst
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
FREE Data Analyst Bootcamp!!
Take my Full Courses and Practice Technical Question on Analyst Builder: https://www.analystbuilder.com/
Link to Data Analyst Bootcamp Playlist: https://bit.ly/3HHqwcr
In this video we walk through the Free Data Analyst Bootcamp right here on my YouTube…
Link to Data Analyst Bootcamp Playlist: https://bit.ly/3HHqwcr
In this video we walk through the Free Data Analyst Bootcamp right here on my YouTube…
🔥3
Знаете почему западный рынок софта более свободный, открытый и продуктивный, чем наш? Ответ лежит в вопросе: потому что он более свободный и открытый.
Это выводы, основанные исключительно на собственном опыте, без детального анализа.
Как только зарубежные компании стали покидать Россию, так или иначе у нас (или в Китае) начали готовить аналоги разных продуктов. Речь именно об инструментах для разработки, бизнеса или ведения дел в том или ином виде.
Меня вскрыло в момент, когда я хотел найти российский аналог популярных BI систем, таких как power bi или tableau. Такие существуют. Но что бы попробовать хотя бы демку, вам нужно оставить свою почту, потом вам напишут, скажут условия, дадут ссылки и тд. Вы такое в последний раз когда видели?
На сайтах нет ни тарифов, ни руководств, ничего. Максимум чахлый блог для продвижения и промо страница.
По моему такой способ взаимодействия стоит на уровне холодных звонков. В чем проблема сразу обозначить цену за продукт, если у него нет бесплатных пакетов? А если есть демка, в чем проблема дать возможность ее скачать после регистрации?
Power bi и tableau были доступны для изучения, даже для работы. Хочешь расширяться, вот тебе тарифы, покупай. Пользуешься бесплатно — согласись на обработку данных.
У наших же какой-то красный флаг на «открытые отношения».
Почему мы делаем аналоги, иной раз чуть ли не под чистую копируя оригинал, но не копируем модель распространения? Китай например копирует. Дак и получается, что российскими продуктами я до сих пор не пользуюсь, а китайскими уже пользуюсь. А причина лишь в том, что к «чужим» товарам доступ проще. Меня там не заставляют ждать почты, тыкать демку, покупать сразу что-то.
Ни кто особо не хочет пользоваться отечественными продуктами, потому что они пишутся на коленке под эгидой альтернативы, а потом принудительно внедряются в гос учреждения что бы хоть как то продаваться.
Программой хочется пользоваться, потому что она хорошо работает, а не потому что она «НАША».
Все наши энтузиасты участвуют в разработке западных open source проектов, потому что в России при всем желании некуда податься в этом поле. Разработчики у нас хорошие, любопытные и деятельные, а бизнес жадный, скупой и безинициативный.
Единственная компания, которая мне приходит на ум, у которой есть бесплатный продукт и которая не задушит тебя рекламой — это лаборатория Касперского. По моему еще Битрикс довольно лояльны к начинающим пользователям.
Право предпринимателя решать, каким образом распоряжаться своим продуктом. Но если единственной целью всегда будет конечный потребитель, то ничего светлого нашей айтишке ждать не придется. Так и будем копировать и продавать.
———
#it #hate
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5 1
Вы можете никогда не использовать tkinter напрямую, но есть библиотеки, которые используют его по умолчания. Например matplotlib — библиотека для визуализации графиков.
Сегодня столкнулся с такой ошибкой:
...
_tkinter.TclError: Can't find a usable init.tcl in the following directories:
...
paths
...
This probably means that Tcl wasn't installed properly.
В моем случае это произошло, потому что вместе с Git я поставил MinGW, который идет вместе с пакетом Git for Windows. А MinGW поставляется с библиотеками Tcl/Tk. Из-за этого возник конфликт в переменных среды. Как я понял, если Git устанавливается на ПК вперед Python, то такого не происходит.
1. Нажать win+i, что бы открыть настройки
2. Далее путь: Система — О системе — Дополнительные параметры системы — Переменные среды
3. Нажимаем создать в области системных переменных
4. Ввести название переменной:
TCL_LIBRARY
5. Указать путь до папки. Что узнать путь, зайдите в диск, на который вы установили Python. Затем в поиске введите tlc. Найдите папку, которая находится в директории Python, а не в Git. В папке будут еще папки. Вам нужна с названием (на момент создания поста) tlc8.6.
В моем случае путь был такой:
C:\Users\Yastrebov\AppData\Local\Programs\Python\Python313\tcl\tcl8.6
6. Осталось сохранить, перезапустить IDE и если у вас была такая же проблема, то она должна решиться
———
#python #error #tlc #tkinter #matplotlib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Пока проходил курс, познакомился с одним ресурсом, похожим на LeetCode, только предназначенный да аналитиков данных.
Ресурс новый, задач мало, бесплатных еще меньше, но тем не менее он узконаправлен и развивается. Но функционально очень круто сделано, советую.
Ссылка на сайт
Также ряд задач с курса на знание SQL запросов:
Easy
1. Apply Discount
2. Car Failure
Moderate
1. Tech Layoffs
2. Separation
Hard
1. Kelly's 3rd Purchase
2. Temperature Fluctuations
———
#SQL #problems #interview #resource #data_analytics
Please open Telegram to view this post
VIEW IN TELEGRAM
Analyst Builder
Analyst Builder is your all in-one platform to become a Data Analyst! Learn technical skills and practice for your technical interviews all in one place.
Представим что у на есть некоторый dataset c неопределенным количеством столбцов:
[..., 'Category', 'Region', 'Inventory Level', ...]
Задача: построить сводную таблицу (как на изображении), для отображения остатков (Inventory Level) во всех регионах для каждой категории и отобразить сумму остатков для каждой категории и каждого региона.
В Excel мы бы создали сводную таблицу, перетащили бы Category в область "Cтроки", Region в область "Столбцы", а Inventory Level в область "Значения".
import pandas as pd
df = pd.read_csv('retail_store_inventory.csv')
pivot_table = df.groupby(['Category', 'Region'])['Inventory Level'].sum().reset_index()
pivot_result = pivot_table.pivot(index='Category', columns='Region', values='Inventory Level')
pivot_result['Total'] = pivot_result.sum(axis=1)
pivot_result.loc['Total'] = pivot_result.sum(axis=0)
Dataset
Ссылка на набор данных
———
#python #pandas #data_analitycs #excel
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
data.rar
132.6 KB
В общем пытался устроится на должность аналитика данных в сеть магазинов, где я когда то поваром работал. Было бы забавно мне кажется. Так на любой вакансии, где есть пук про АЙ ТИ, конкуренция безумная, я решил не ограничиваться отправкой резюме.
Так как в вакансии было указано, что нужно знать pandas, я решил спарсить данные о продуктах с сайта и как раз с помощью pandas что то почистить, проанализировать. Бонусом сделал небольшую презентацию на 5 слайдов с не графиками и аналитикой.
В итоге даже не заслужил фразы "Мы одобрили другого кандидата, а ваше резюме отложили. Если вакансия снова откроется, то мы вам напишем".
Но никакого расстройства, прикольная практика вышла.
Репозиторий
Данные в прикрепе
———
#python #pandas #data_analitycs #resources #dataset
Please open Telegram to view this post
VIEW IN TELEGRAM