Python — язык программирования без лишнего синтаксиса. Читаемость и простота дизайна — две основные причины его огромной популярности.
Как говорится в дзене Python:
Вот почему стоит помнить некоторые распространенные приемы Python, которые помогают улучшить дизайн кода. Они избавят вас от необходимости просматривать Stack Overflow каждый раз, когда вам что-то нужно.
Эти приемы пригодятся в вашей ежедневной практике.
1. Переворачивание строки
Фрагмент ниже переворачивает строку, используя операцию среза.
# Переворачивает строку, используя срез
my_string = "ABCDE"
reversed_string = my_string[::-1]
print(reversed_string)
# Вывод
# EDCBA
2. Заглавные буквы
Следующий фрагмент используется для преобразования строки в регистр с заглавными буквами с применением метода title()
класса string
.
my_string = "my name is chaitanya baweja"
# использование функции title()
new_string = my_string.title()
print(new_string)
# вывод
# My Name Is Chaitanya Baweja
3. Поиск уникальных элементов в строке
Этот фрагмент можно использовать для поиска уникальных элементов в строке с помощью свойства, что все элементы в наборе уникальны.
my_string = "aavvccccddddeee"
# преобразование строки в набор
temp_set = set(my_string)
# сшивание набора в строку с помощью join
new_string = ''.join(temp_set)
print(new_string)
4. Вывод строки или списка n раз
Можно использовать умножение (*) со строками или списками; умножать их можно любое количество раз.
n = 3 # число повторений
my_string = "abcd"
my_list = [1,2,3]
print(my_string*n)
# abcdabcdabcd
print(my_list*n)
# [1,2,3,1,2,3,1,2,3]
Интересным вариантом может быть определение списка с постоянным значением, скажем, ноль.
n = 4
my_list = [0]*n # n обозначает длину списка
# [0, 0, 0, 0]
5. Генератор списков
Генератор списков предоставляет элегантный способ создания списков на базе других списков.
Следующий фрагмент создает новый список, умножая каждый элемент предыдущего списка на два.
# Умножение каждого элемента списка на 2
original_list = [1,2,3,4]
new_list = [2*x for x in original_list]
print(new_list)
# [2,4,6,8]
6. Обмен значениями между двумя переменными
Python упрощает обмен значениями между двумя переменными без использования другой переменной.
a = 1
b = 2
a, b = b, a
print(a) # 2
print(b) # 1
7. Разбиение строки на список подстрок
Мы можем разбить строку на список подстрок, используя метод split()
класса string. В качестве аргумента также можно передать разделитель, которым вы разбиваете строку.
string_1 = "My name is Chaitanya Baweja"
string_2 = "sample/ string 2"
# разделитель по умолчанию ' '
print(string_1.split())
# ['My', 'name', 'is', 'Chaitanya', 'Baweja']
# заданный разделитель '/'
print(string_2.split('/'))
# ['sample', ' string 2']
8. Объединение списка строк в одну строку
Метод join()
объединяет список строк, заданный как аргумент, в одну строку. В нашем случае мы объединили их, используя в качестве разделителя запятую.
list_of_strings = ['My', 'name', 'is', 'Chaitanya', 'Baweja']
# Использование join с разделителем ","
print(','.join(list_of_strings))
# Вывод
# My,name,is,Chaitanya,Baweja
9. Проверка строки на палиндром
Мы уже рассмотрели, как перевернуть строку. Таким образом палиндромы становятся простейшей программой в Python.
my_string = "abcba"
if my_string == my_string[::-1]:
print("palindrome")
else:
print("not palindrome")
# Вывод
# palindrome
10. Подсчет частотности элементов в списке
Мой любимый способ посчитать частотность элемента в списке — это использование класса Counter
.
Счетчик Python отслеживает частотность каждого элемента в контейнере. Counter()
возвращает словарь с элементами в качестве ключей и частотностью в качестве значений.
Мы также используем функцию most_common()
, чтобы получить most_frequent element
в списке.
# находим частотность каждого элемента в списке
from collections import Counter
my_list = ['a','a','b','b','b','c','d','d','d','d','d']
count = Counter(my_list) # определяем объект для расчета
print(count) # всех элементов
# Counter({'d': 5, 'b': 3, 'a': 2, 'c': 1})
print(count['b']) # конкретного элемента
# 3
print(count.most_common(1)) # элемента с наибольшей частотностью
# [('d', 5)]
11. Анаграммы
Интересное применение класса Counter
— это поиск анаграмм. Анаграмма — это слово или фраза, сформированные перестановкой букв другого слова или фразы.
Если объекты Counter
двух строк эквивалентны, значит, они являются анаграммами.
from collections import Counter
str_1, str_2, str_3 = "acbde", "abced", "abcda"
cnt_1, cnt_2, cnt_3 = Counter(str_1), Counter(str_2), Counter(str_3)
if cnt_1 == cnt_2:
print('1 and 2 anagram')
if cnt_1 == cnt_3:
print('1 and 3 anagram')
12. Блок try-except-else
Обработку ошибок в Python легко выполнить, используя блок try/except
. Можно добавить к блоку состояние else
— оно запускается, когда в блоке try
нет исключений.
Если вам нужно запустить что-то независимо от исключений, используйте finally
.
a, b = 1,0
try:
print(a/b)
# исключение появляется, когда b равно 0
except ZeroDivisionError:
print("division by zero")
else:
print("no exceptions raised")
finally:
print("Run this always")
13. Функция enumerate для получения пар индекс-значение
Следующий скрипт использует функцию enumerate для перебора значений в списке вместе с их индексами.
my_list = ['a', 'b', 'c', 'd', 'e']
for index, value in enumerate(my_list):
print('{0}: {1}'.format(index, value))
# 0: a
# 1: b
# 2: c
# 3: d
# 4: e
14. Проверка использования памяти объектом
Следующий скрипт используется для проверки использования памяти объектом.
import sys
num = 21
print(sys.getsizeof(num))
# В Python 2, 24
# В Python 3, 28
15. Объединение двух словарей
В Python 2 для соединения двух словарей мы использовали метод update()
. В Python 3.5 процесс еще проще.
В скрипте ниже объединены два словаря. В случае пересечения используются значения из второго словаря.
dict_1 = {'apple': 9, 'banana': 6}
dict_2 = {'banana': 4, 'orange': 8}
combined_dict = {**dict_1, **dict_2}
print(combined_dict)
# Вывод
# {'apple': 9, 'banana': 4, 'orange': 8}
16. Время, затраченное на выполнение части кода
Следующий фрагмент использует библиотеку time
для расчета времени, затраченного на исполнение части кода.
import time
start_time = time.time()
# начало проверяемого кода
a, b = 1,2
c = a+ b
# конец проверяемого кода
end_time = time.time()
time_taken_in_micro = (end_time- start_time)*(10**6)
print(" Time taken in micro_seconds: {0} ms").format(time_taken_in_micro)
17. Сглаживание списка списков
Иногда вы не уверены в глубине вложенности списка, вам просто нужно отобразить все элементы в одном списке.
Вот как можно это сделать:
from iteration_utilities import deepflatten
# если у вас есть только один nested_list, используйте этот фрагмент
def flatten(l):
return [item for sublist in l for item in sublist]
l = [[1,2,3],[3]]
print(flatten(l))
# [1, 2, 3, 3]
# если вы не знаете глубину вложения списка
l = [[1,2,3],[4,[5],[6,7]],[8,[9,[10]]]]
print(list(deepflatten(l, depth=3)))
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
18. Выборка из списка
Следующий фрагмент генерирует n
случайных выборок из указанного списка, используя библиотеку random
.
import random
my_list = ['a', 'b', 'c', 'd', 'e']
num_samples = 2
samples = random.sample(my_list,num_samples)
print(samples)
# [ 'a', 'e'] здесь будет 2 случайных значения
Мне порекомендовали библиотеку secrets для генерации случайных выборок для криптографии. Следующий фрагмент работает только на Python 3.
import secrets # импортирует защищенный модуль
secure_random = secrets.SystemRandom() # создает защищенный
# случайный объект
my_list = ['a','b','c','d','e']
num_samples = 2
samples = secure_random.sample(my_list, num_samples)
print(samples)
# [ 'e', 'd'] здесь будут 2 случайных значения
19. Список цифр
Следующий фрагмент преобразует целое число в список цифр.
num = 123456
# использование map
list_of_digits = list(map(int, str(num)))
print(list_of_digits)
# [1, 2, 3, 4, 5, 6]
# использование list comprehension
list_of_digits = [int(x) for x in str(num)]
print(list_of_digits)
# [1, 2, 3, 4, 5, 6]
20. Проверка уникальности
Следующая функция проверит все элементы в списке на уникальность.
def unique(l):
if len(l)==len(set(l)):
print("All elements are unique")
else:
print("List has duplicates")
unique([1,2,3,4])
# Все элементы уникальны
unique([1,1,2,3])
# Список содержит дубликаты
Читайте также:
- Введение в модульное тестирование на Python
- Альтернатива switch в Python
- Знакомство с классами в Python
Перевод статьи Chaitanya Baweja: 20 Python Snippets You Should Learn Today