Python Tech

Однострочники Python: comprehension и т.д.

Однострочные конструкции в Python делают код кратким и лаконичным. Но не всегда улучшают его читаемость.

Распаковка кортежа

В примере предполагается, что нужные символы/числа/слова будут вводиться вручную через пробел.

x, y, z = input().strip().split()
print(f"{x=}, {y=}, {z=}")

map()

Функция позволяет преобразовать каждый элемент массива без обхода в цикле.

# Преобразование каждого элемента массива в целочисленный
x, y, z = map(int, (x, y, z))

# Возведение каждого элемента в квадрат
x, y, z = map(lambda a: a**2, (x, y, z))

reduce()

Функция применяет предложенное условие к двум элементам массива кумулятивно

from functools import reduce

x, y, z = map(int, input().strip().split())

# Попарное перемножение двух первых элементов
# Произведение первых двух элементов затем умножается на третий элемент и т.д.
volume = reduce(lambda a, b: a * b, (x, y, z))

print(volume)

List Comprehension

Генератор списка – конструкция вида:

l = [x for x in range(10)]

Можно использовать с условием:

names = ['Christoff', 'Ademar', 'Teya', 'Stephania', 'Arhiph']

# Отбираем все имена из списка, начинающиеся с буквы "A"
names_starts_a = [name for name in names if name.startswith('A')]

print(names_starts_a)

filter()

Функция позволяет отобрать элементы массива по условию:

names = ['Christoff', 'Ademar', 'Teya', 'Stephania', 'Arhiph']

# Отбираем все имена из списка, начинающиеся с буквы "A"
names_starts_a = filter(lambda a: a.startswith('A'), names)

# Результат работы filter - генератор, поэтому переводим его в list
print(list(names_starts_a))

Копирование списка с помощью среза

Суть создания копии в том, чтобы в памяти был создан другой объект с таким же значением. Простое приравнивание вида l1 = l2 НЕ создает нового объекта в памяти (создается ссылка на первый объект, и при изменении объекта l1 меняется и l2).

l1 = [1, 3, 5, 7]

l2 = l1[:]

print(l1 is l1_copy) # False

Не стоит забывать о методе .copy() и .deepcopy().

Инвертирование списка с помощью среза

l1 = [1, 3, 5, 7]

l2 = l1[::-1]

print(l2) # [7, 5, 3, 1]

all()

Функция all() позволяет убедиться, что все элементы массива являются True. Если хотя бы один элемент не является True, функция вернет False.

a = b = c = d = True
if all((a, b, c, d)):
    print("All True!!!")

any()

Функция any() позволяет убедиться, что хотя бы один элемент массива является True.

d = True
a = b = c = None
if any((a, b, c, d)):
    print("Any True!!!")

Тернарный оператор

Это конструкция вида: A if CONDITION else B. Заменяет многострочную конструкцию if-else.

n = 1
admin_email = "agner@mail.ru" if n > 2 else "xxx@xxx.xx"

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить