Однострочные конструкции в 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"