Ques/Help/Req Ещё 10 фишек Python, которые поднимут ваш скилл на новый уровень

XakeR

Member
Регистрация
13.05.2006
Сообщения
1 912
Реакции
0
Баллы
16
Местоположение
Ukraine
Фишек в Python никогда не бывает много. Чем больше таких вы освоите, тем выше шанс на практике оперативно справиться с каким-нибудь очередным затыком. Да и на техническом собеседовании покажете себя с лучшей стороны. В статье Елена Капаца – Data Analyst компании Инфостарт – рассказывает, какие еще трюки круто помогают новичку (и не только) прокачаться.

С первой статьей цикла вы можете познакомиться по ссылке.

1. Форматирование многострочного вывода​


Если вы хотите, чтобы вывод напоминал табличку с одинаковым отступом, то при использовании F-строк добавьте интерполируемой переменной двоеточие и число, одинаковое для всех print(), например, 10. Это «резервирует» пространство из 10 символов:

name1 = ‘Владимир’ name2 = ‘Илья’ print(f'{name1:10}: тимлид’) print(f'{name2:10}: фулстэк-разработчик’)

Вывод будет приятным и опрятным:

Владимир : тимлид Илья : фулстэк-разработчик

2. Частичное совпадение пользовательского ввода​


Эта замечательная фича позволяет справляться с ситуациями, когда пользователь вводит не все, что от него ожидается. Фишка работает в версиях Python не ниже 3.10:

>>> def do_this(): >>> print(‘Пойди туда — не знаю куда’) >>> >>> >>> def do_that(): >>> print(‘Принеси то — не знаю что’) >>> >>> >>> match input(‘Что сделать? ‘): >>> case ‘пойди’: >>> do_this() >>> case ‘принеси’: >>> do_that() >>> case _: >>> print(‘Неверный ввод. Попробуйте еще раз.’) … Что сделать? пойди … Пойди туда — не знаю куда [Повторный запуск программы] Что сделать? поспи … Неверный ввод. Попробуйте еще раз.

3. Выборка простых чисел в списке любого размера​


Выбирать простые числа приходилось мне на практике разве что во время учёбы, так что найти этому коду реальное применение непросто. Однако его легко переиначить для поиска любых других типов чисел – чётных / нечётных / делимых на определенное число:

>>> nums=range (1,1000) >>> >>> def is_prime (num) : >>> for x in range (2, num) : >>> if (num%x) == 0: >>> return False >>> return True >>> >>> primes=list(filter (is_prime, nums)) >>> print(primes)… [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]

4. Словарное включение​


Многим из нас знакомо списковое включение (List Comprehension), которое позволяет за одну строку кода сгенерировать список:

>>> names = [ >>> ‘Daniel’, >>> ‘Mike’, >>> ‘William’ >>> ]>>> >>> newNames = [x for x in names if «a» in x] # Выберет имена, где есть “а”

Оказывается, Python поддерживает аналогичный функционал для словарей! Код ниже генерирует словарь, где у каждого имени определяется длина в символах:

>>> length = {name:len(name) for name in names} # Создаст словарь “имя – длина” >>> print(length) … {‘Daniel’: 6, ‘Mike’: 4, ‘William’: 7}

5. Резервирование символов​


С помощью операторов > / < / ^ вы можете добавлять выходному значению символы, к примеру, облегчающие поиск среди других выходных значений:

>>> text = ‘Это эпично’ >>> print(f'{text}’) >>> print(f'{text:#<20}’) >>> print(f'{text:_>20}’) >>> print(f'{text:^20}’) … Это эпично … Это эпично########## … __________Это эпично … Это эпично

Как видно в сниппете выше, < добавит символы после, > – до, а ^ – окружит с двух сторон.

6. Splat-оператор​


Splat (одна звездочка) расширяет коллекцию до позиционных аргументов, а splatty-splat (две звездочки) — словарь до именованных аргументов:

Этот код:

args = (1, 2) kwargs = {‘x’: 3, ‘y’: 4, ‘z’: 5} func(*args, **kwargs)

Равнозначен этому:

func(1, 2, x=3, y=4, z=5)

7. Фильтрация списка без цикла​


Здесь неожиданно выделился модуль itertools. Если у нас есть два списка с именами и идентификаторами:

>>> import itertools >>> leaders = [‘Иван’, ‘Андрей’, ‘Александра’, ‘Артем’, ‘Инна’] >>> selector = [1, 1, 0, 0, 0]

То вы можете выбрать из списка leaders только те, где значения selector равны единице:

>>> print(list(itertools.compress(leaders, selector))) … [‘Иван’, ‘Андрей’]

8. Подсчёт числа элементов в списке​


Помимо способности collections.Counter() понимать, что именно в строке нужно подсчитать:

>>> from collections import Counter >>> print(Counter(«Ростов-на-Дону»).most_common(3)) # Выделит три самых частовстречающихся символа… [(‘о’, 3), (‘-‘, 2), (‘н’, 2)]

В случае со списком слов модуль автоматически рассчитывает, как часто встречается то или иное слово:

>>> party_list = [«Алиса», «Федор», «Алиса», «Евгения», «Андрей», «Евгения», «Алексей»] >>> print(Counter(party_list)) … Counter({‘Алиса’: 2, ‘Евгения’: 2, ‘Федор’: 1, ‘Андрей’: 1, ‘Алексей’: 1})

9. Поиск отличий в списках​


Допустим, у нас есть две длинные строки, и мы хотим найти отличия. seq1 и seq2 в сниппете ниже – это последовательности генов:

>>> seq1 = ‘atgcttcggcaagactcaaaaaata’ >>> seq2 = ‘atscttcsscaagactaaaaaaata’ >>> >>> zip_seqs = zip(seq1, seq2) >>> >>> enum_seqs = enumerate(zip_seqs) >>> >>> for i, (a, b) in enum_seqs: >>> if a != b: >>> print(f’index: {i}’)

Можно использовать комбинацию zip() и enumerate(). Первая сопоставит символы с одинаковыми индексами, а вторая – присвоит каждой паре символов порядковый номер (всего 24). Чтобы найти отличающиеся символы, достаточно сравнить символы попарно в цикле for:

… index: 2 … index: 7 … index: 8 … index: 16

10. Перегонка кортежа в словарь​


Допустим, у нас есть кортеж, где каждое значение – строка из двух символов:

>>> values = (‘a1’, ‘b2’, ‘c3’)

Если «навесить» функцию dict(), то в результате мы получим словарь с разделенными на ключ – значение парами:

>>> print(dict(values)) … {‘a’: ‘1’, ‘b’: ‘2’, ‘c’: ‘3’}

Заключение​


Лаконичный неочевидный код, в одну строку делающий то, что у новичка бы заняло пять, сродни задачам по комбинаторике в школе, – понятно не всем и не сразу. Так что не злитесь на себя, если такое забывается. Просто сохраняйте в закладки. И джуны, и сеньоры – все мы гуглим такое.

Дайте знать в комментариях, интересно ли вам получить регулярное продолжение этой рубрики.
 
198 178Темы
635 149Сообщения
3 618 415Пользователи
еу4уууеууеНовый пользователь
Верх