Python вопросы с собеседований
24.8K subscribers
713 photos
93 videos
17 files
583 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
🐍 Python-совет: как объединить списки разной длины

Обычный zip() прекращает работу, когда заканчивается самый короткий список:


x = [1, 2, 3, 4, 5]
y = ["a", "b", "c"]

print(list(zip(x, y)))
# [(1, "a"), (2, "b"), (3, "c")]


Чтобы сохранить все элементы, используйте zip_longest()


from itertools import zip_longest

print(list(zip_longest(x, y)))
# [(1, "a"), (2, "b"), (3, "c"), (4, None), (5, None)]


Для пустых позиций можно указать своё значение:

result = zip_longest(
x,
y,
fillvalue="нет значения",
)```

Полезно при объединении таблиц, колонок и данных из источников разной длины.

#Python #Programming #DataProcessing
6🔥3🥰1
🚀 Neo4j без сервера: GraphForge запускает полноценный Cypher прямо внутри Python-скрипта

GraphForge занимает редкую нишу между NetworkX и серверными графовыми БД. Вы получаете встроенный графовый движок на Rust, полный openCypher и хранение проекта в обычной директории.

Что внутри:

- четыре независимых слоя на Rust: parser → IR → planning → execution;
- результаты сразу возвращаются как Apache Arrow Table;
- данные легко передаются в Pandas и Polars;
- постоянное хранение построено на Parquet;
- встроены PageRank, Louvain и гибридный текстово-векторный поиск;
- Python- и Node.js-биндинги работают поверх одного движка.


from graphforge import GraphForge

graph = GraphForge("research/")

result = graph.execute("""
MATCH (a)-[:CITES]->(b)
RETURN a.title, b.title
""")

print(result.to_pandas())


При этом GraphForge честно позиционируется как инструмент исследовательского и notebook-масштаба. Для миллиардных графов, высокой нагрузки и многопользовательского доступа по-прежнему нужна серверная БД.

Python и Node.js доступны сейчас, Swift и Kotlin находятся в планах. Лицензия — Apache 2.0.

https://github.com/CurateLabs/graphforge

#RustLang #Python #OpenSource #GraphDatabase #DataScience #KnowledgeGraph
1👍1
⚡️ Как узнать количество CPU в Python одной строкой

Для этого не нужны сторонние библиотеки — всё есть в стандартном multiprocessing:


import multiprocessing

print(multiprocessing.cpu_count())


Например:


8


Но есть важный нюанс: функция обычно возвращает количество логических процессоров, доступных системе, а не обязательно число физических ядер.

То же самое можно получить через:


import os

print(os.cpu_count())


Это особенно полезно, когда нужно автоматически подобрать количество worker-процессов:


workers = multiprocessing.cpu_count()


Но запускать N workers только потому, что у CPU есть N потоков, не всегда оптимально. Для CPU-bound задач количество процессов обычно подбирают экспериментально, а для I/O-bound архитектура может быть совсем другой.

Маленькая функция, но часто полезна при настройке multiprocessing, worker pools и параллельных вычислений.

#Python #Programming #Multiprocessing #Backend
1👍1
Media is too big
VIEW IN TELEGRAM
Главный секрет bool: он на самом деле int
Складываю True и True, получаю 2

Складываешь два True в Python и получаешь 2. Не баг и не магия: bool наследуется от int, поэтому True это единица, а False это ноль. Минута, и ты больше никогда не удивишься sum по списку булевых значений.

#python
3👍3🔥3
Forwarded from Just Xor
🐍 Генераторные выражения в Python - один из самых простых способов экономить память.

Обычный list comprehension сразу создаёт весь список:


squares = [x ** 2 for x in range(1_000_000)]


А generator expression вычисляет значения только по мере необходимости:


squares = (x ** 2 for x in range(1_000_000))


То есть миллион элементов не хранится в памяти одновременно.

Можно получать значения по одному:


next(squares)


или передать генератор напрямую в:


sum(...)
max(...)
any(...)
all(...)


Главный плюс - lazy evaluation.

Особенно полезно для:

- больших файлов;
- потоков данных;
- длинных последовательностей;
- ETL-пайплайнов;
- обработки данных, которые не нужно хранить целиком.

Но есть нюанс: генератор одноразовый.

После того как значения закончились, пройти по нему повторно уже нельзя.

Маленький синтаксический приём, который может заметно уменьшить потребление памяти.

#Python #Programming #Backend #DataEngineering
👍53