Однострочный код на Python: лаконичные решения для повседневных задач

Раздел: Python -> Разное

Основные подходы к однострочному коду

Python позволяет писать компактные решения в одну строку. Это удобно для быстрых преобразований данных, но требует осторожности для сохранения читаемости.

List comprehension (списковое включение) - основной инструмент однострочной обработки списков.

Пример:

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

One line python (однострочный код python)

создаёт список квадратов чисел от 0 до 9. Каждый элемент вычисляется на лету.

Этот подход перебирает элементы, применяет выражение и возвращает новый список. Он работает быстрее цикла for с append благодаря внутренней оптимизации.

Как преобразовать список чисел в строки?

str_numbers = list(map(str, numbers))
или
str_numbers = [str(x) for x in numbers]

Оба варианта однострочные. map применяет функцию str к каждому элементу, результат оборачивается в список. List comprehension делает то же самое, но часто считается более Pythonic.

Как отфильтровать список по условию?

evens = [x for x in range(20) if x % 2 == 0]
или
evens = list(filter(lambda x: x % 2 == 0, range(20)))

Фильтрация через условие после for в comprehension. filter принимает функцию-предикат и итерируемый объект, возвращает итератор.

Как применить функцию ко всем элементам без создания списка?

map(print, ['a', 'b', 'c'])

Если результат не нужен, map можно использовать для побочных эффектов (но лучше цикл for). В Python 3 map ленивый, вывод не будет напечатан без list() или цикла.

Как выполнить условное присваивание в одной строке?

result = x if condition else y

Тернарный оператор возвращает x, если condition истинно, иначе y. Часто используется внутри comprehensions.

Как проверить, что все элементы удовлетворяют условию?

all(x > 0 for x in numbers)
any(x < 0 for x in numbers)

all возвращает True, если все элементы истинны (непустые и не равны нулю). any возвращает True, если хотя бы один элемент истинен.

Как объединить два списка в словарь?

dict(zip(keys, values))

zip объединяет элементы двух списков в пары, dict создаёт словарь. Количество ключей и значений должно совпадать.

Как получить уникальные элементы списка, сохраняя порядок?

list(dict.fromkeys(lst))

dict.fromkeys создаёт словарь с ключами из списка, сохраняя порядок в Python 3.7+. Значения игнорируются, потом преобразуем в список.

Типичные ошибки и проблемы:

  • Перегрузка памяти: однострочные генераторы списков создают полный список в памяти. Для больших данных лучше использовать генераторные выражения (круглые скобки вместо квадратных).
  • Читаемость: цепочки из нескольких comprehensions или вложенные выражения трудно отлаживать. Рекомендуется разделять на несколько строк.
  • Побочные эффекты: использование list comprehension для вывода или изменения внешних переменных - плохая практика.
  • Производительность: filter+lambda может быть медленнее comprehension из-за вызова функции на каждой итерации.
  • Путаница с операторами: например, not in вместо !=. Синтаксис следует проверять.

Расширенные примеры однострочного кода

Ниже приведены более сложные и нестандартные применения однострочных конструкций в Python.

FizzBuzz в одну строку

Пример
print(*['FizzBuzz' if i%15==0 else 'Fizz' if i%3==0 else 'Buzz' if i%5==0 else i for i in range(1,31)], sep='\n')
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz

Поиск палиндромов в списке

Пример
words = ['radar', 'hello', 'level', 'world', 'deified']
palindromes = [w for w in words if w == w[::-1]]
print(palindromes)
['radar', 'level', 'deified']

Слияние словарей (Python 3.9+)

Пример
d1 = {'a':1, 'b':2}; d2 = {'c':3, 'd':4}
merged = d1 | d2
print(merged)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

Транспонирование матрицы

Пример
matrix = [[1,2,3],[4,5,6]]
transposed = list(zip(*matrix))
print(transposed)
[(1, 4), (2, 5), (3, 6)]

Фильтрация строк файла

Пример
lines = [line.strip() for line in open('data.txt') if line.strip()]
print(lines[:5])
['строка1', 'строка2', ...] (зависит от файла)

Произведение элементов списка через reduce

Пример
from functools import reduce
lst = [1,2,3,4,5]
product = reduce(lambda x,y: x*y, lst, 1)
print(product)
120

Проверка всех элементов на положительность

Пример
nums = [1,2,3,0,5]
result = all(x > 0 for x in nums)
print(result)
False

Поиск первого положительного числа

Пример
data = [-1, -2, 3, -4]
first_pos = next((x for x in data if x > 0), None)
print(first_pos)
3

Сортировка по длине строки

Пример
fruits = ['banana', 'apple', 'cherry', 'date']
sorted_fruits = sorted(fruits, key=len)
print(sorted_fruits)
['date', 'apple', 'banana', 'cherry']

Генератор квадратов чётных чисел

Пример
squares = [x*x for x in range(10) if x%2==0]
print(squares)
[0, 4, 16, 36, 64]

Разворот строки

Пример
s = 'Python'
rev = s[::-1]
print(rev)
nohtyP

Однострочный код Python - comments

En
One line python (python)