Это сделает Python великим
Оригинал "25 Useful Python One-Liners That You Should know" от Abhay Parashar
Перед прочтением: в руках каждого разработчика должны быть удобные и практичные инструменты. Однострочники, как и синтаксический сахар, - это пример грамотного написания кода, который повышает вашу продуктивность и качество в глазах коллег, но при этом не требует каких-то сверхестественных усилий. Надеюсь, перевод данной статьи окажется полезным.
В тот день, когда я написал свою первую строчку кода на Python, я был очарован простотой, популярностью и крутостью его однострочников. В своем блоге я хочу представить несколько однострочников на Python.
1. Сменка двух переменных
# a = 4 b = 5
a,b = b,a
# print(a,b) >> 5,4
Давайте начнем с чего-то более простого, например, поменяем местами две переменные друг с другом. Этот метод - один из самых простых и интуитивно понятных методов, который вы можете написать без необходимости использовать временную переменную или применять арифметические операции.
2. Множественные присвоения переменных
a,b,c = 4,5.5,'Hello'
#print(a,b,c) >> 4,5.5,hello
Вы можете использовать запятые и переменные, чтобы назначать нескольким переменным значения за раз. Используя этот метод, вы даже можете назначить несколько типов данных var за раз. Вы можете использовать список для присвоения значений переменным. Ниже приведен пример присвоения нескольких значений разным переменным из списка.
a,b,*c = [1,2,3,4,5]
print(a,b,c)
> 1 2 [3,4,5]
3. Сумма четных чисел в списке
Для этого может быть много способов, но лучший и самый простой способ - использовать индексирование списка и функцию суммирования.
a = [1,2,3,4,5,6]
s = sum([num for num in a if num%2 == 0])
print(s)
>> 12
4. Удаление нескольких элементов из списка
del
- ключевое слово, используемое в Python для удаления объектов из списка.
#### Удаляем все четные числа
a = [1,2,3,4,5]
del a[1::2]
print(a)
>[1, 3, 5]
5. Чтение файлов
lst = [line.strip() for line in open('data.txt')]
print(lst)
Здесь мы используем понимание того, как устроен список. Сначала мы открываем текстовый файл и с помощью цикла for
читаем строку за строкой. В итоге с помощью strip
убираем все лишнее пространство. Но есть один более простой и короткий способ сделать то же самое, используя только функцию списка.
list(open('data.txt'))
##Использование with также закроет файл после использования
with open("data.txt") as f: lst=[line.strip() for line in f]
print(lst)
6. Запись данных в файл
with open("data.txt",'a',newline='\n') as f: f.write("Python is awesome")
Приведенный выше код сначала создаст файл data.txt, если его еще нет, а затем напишет в этом файле Python is awesome
.
7. Создание списков
lst = [i for i in range(0,10)]
print(lst)
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
или
lst = list(range(0,10))
print(lst)
Мы также можем создать список строк, используя тот же метод.
lst = [("Hello "+i) for i in ['Karl','Abhay','Zen']]
print(lst)
> ['Hello Karl', 'Hello Abhay', 'Hello Zen']
8. Mapping списков, или изменение типа данных в списке
Иногда в нашем проекте нам нужно изменить типы данных всех элементов в списке. Первый способ, который приходит вам в голову, - использовать цикл, а затем получить доступ ко всем элементам из списка, а затем один за другим изменить тип данных элементов. Этот метод предназначен для старой школы в Python. У нас есть функция map
, которая может делать эту работу за нас.
list(map(int,['1','2','3']))
> [1, 2, 3]
list(map(float,[1,2,3]))
> [1.0, 2.0, 3.0]
# А вот как делалось раньше
[float(i) for i in [1,2,3]]
> [1.0, 2.0, 3.0]
9. Создание набора
Метод, который мы использовали для создания списков, также можно использовать для создания наборов. Давайте создадим набор с помощью метода, который возвращает квадратный корень всех четных чисел в диапазоне.
# Квадрат всех четных чисел в диапазоне
{x**2 for x in range(10) if x%2==0}
> {0, 4, 16, 36, 64}
10. Fizz Buzz
Это тест, в котором нам нужно написать программу, что печатает числа от 1 до 100. Но для чисел, кратных трем, выведет «Fizz» вместо числа, а для кратных пяти выведет «Buzz». (если кратно и трем, и пяти, то выводится, соответственно, FizzBuzz).
Похоже, нам нужно использовать циклы и несколько операторов if-else. Если вы попытаетесь сделать это на любом другом языке, то вам, возможно, придется написать до 10 строк кода. Но используя python, мы сможем реализовать FizzBuzz всего одной строкой кода.
['FizzBuzz' if i%3==0 and i%5==0 else 'Fizz' if i%3==0 else 'Buzz' if i%5==0 else i for i in range(1,20)]
В приведенном выше коде мы используем понимание списка для запуска цикла от 1 до 20, а затем на каждой итерации цикла мы проверяем, делится ли число на 3 или 5. Если да, то мы заменяем число на Fizz или Buzz соответственно (при выполнении обоих условий заменим число на FizzBuzz).
11. Палиндром
Палиндром - это число или строка, которые в обратном виде выглядят одинаково.
text = 'level'
ispalindrome = text == text[::-1]
ispalindrome
> True
12. Целые числа, разделенные пробелами, в списке
lis = list(map(int, input().split()))
print(lis)
> 1 2 3 4 5 6 7 8
[1, 2, 3, 4, 5, 6, 7, 8]
13. Лямбда-функция
Лямбда-функция - это небольшая анонимная функция.
Лямбда-функция может принимать любое количество аргументов, но может иметь только одно __выражение.
sqr = lambda x: x * x ##Функция, возвращающая квадрат любого числа
sqr(10)
> 100
14. Проверить наличие числа в списке
num = 5
if num in [1,2,3,4,5]:
print('present')
> present
15. Вывод паттернов
Паттерны - это то, что меня всегда увлекало. В python мы можем рисовать удивительные паттерны, используя всего одну строку кода.
n = 5
print('\n'.join('?' * i for i in range(1, n + 1)))
>
?
??
???
????
?????
16. Нахождение факториала
Факториал - это произведение целого числа и всех целых чисел в порядке перед ним.
import math
n = 6
math.factorial(n)
> 720
17. Ряд Фибоначчи
Ряд Фибоначчи - это серия чисел, в которой каждое число (число Фибоначчи) является суммой двух предыдущих чисел. Простейший ряд Фибоначчи: 1, 1, 2, 3, 5, 8, 13 и т.д. Мы можем использовать создание списка и цикл for для создания ряда Фибоначчи в необходимом нам диапазоне.
fibo = [0,1]
[fibo.append(fibo[-2]+fibo[-1]) for i in range(5)]
fibo
> [0, 1, 1, 2, 3, 5, 8]
18. Простое число
Простое число - это число, которое делится только само на себя и 1. например: 2,3,5,7 и т. Д. Чтобы сгенерировать простые числа в диапазоне, мы можем использовать функцию списка с фильтром и лямбда для генерации простых чисел.
list(filter(lambda x:all(x % y != 0 for y in range(2, x)), range(2, 13)))
> [2, 3, 5, 7, 11]
19. Нахождение максимального числа
findmax = lambda x,y: x if x > y else y
findmax(5,14)
> 14
или
max(5,14)
В приведенном выше коде с использованием лямбда-функции мы проверяем условие сравнения и в соответствии с ним возвращаем максимальное число.
20. Линейная алгебра
Иногда нам нужно увеличить числа в списке в 2 или 5 раз. Код ниже покажет, как это сделать.
def scale(lst, x): return [i*x for i in lst]
scale([2,3,4], 2) ## вызов функции
> [4,6,8]
21. Транспонировать матрицу
Если вам нужно преобразовать все строки в столбцы и наоборот, в python вы можете транспонировать матрицу всего в одну строку кода, используя функцию zip.
a=[[1,2,3],
[4,5,6],
[7,8,9]]
transpose = [list(i) for i in zip(*a)]
transpose
> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
22. Подсчет нахождений паттерна
Это важный и рабочий метод, когда нам нужно знать количество повторений паттерна в тексте. В python есть библиотека re, которая сделает эту работу за нас.
import re; len(re.findall('python','python is a programming language. python is python.'))
> 3
23. Замена текста другим текстом
"python is a programming language. python is python".replace("python",'Java')
> Java is a programming language. Java is Java
24. Симуляция подбрасывания монеты
Это может быть не так важно, но может быть очень полезно, когда вам нужно сгенерировать случайный выбор из заданного набора вариантов.
import random; random.choice(['Head',"Tail"])
> Head
25. Генерация групп
groups = [(a, b) for a in ['a', 'b'] for b in [1, 2, 3]]
groups
> [('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3)]
Я поделился всеми полезными и важными однострочниками, которые я знаю. Если вы знаете какие-то ещё, поделитесь в комментариях.
usego
join сломал хабр?
marshersusanin Автор
Я что-то пропустил, текст сломался на хабре и что-то пропало? У меня всё цело и на месте просто О_о
usego
уже порядок