techukraine.net techukraine.net 16 корисних однострочників Python для спрощення типових завдань

16 корисних однострочників Python для спрощення типових завдань

| | 0 Comments| 11:41 AM
Categories:

Хочете написати елегантний код на Pythonic? Ось список корисних однорядкових програм Python для виконання простих завдань.

Якщо ви початківець програміст Python, ви витратите час на розуміння основних структур даних, таких як списки та рядки. І деякі операції над цими структурами даних можна виконати за допомогою стислих однорядкових фрагментів коду.

Як програміст, ви повинні надавати пріоритет читабельності та зручності обслуговування, а не скороченню коду. Але на Python легко придумати однострокові коди, які відповідають хорошим практикам кодування.

У цій статті ми зосередимося на однорядках для простих завдань обробки списків і рядків у Python.

Давайте розпочнемо!

Зміст

Створіть список чисел

Найпростішим способом створення списку чисел є використання функції range(). Функція range() повертає об’єкт діапазону, який можна перетворити в список. Використання діапазону (num) дасть послідовність 0, 1, 2,.., num-1.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Детальніше про використання функції range().

Ви також можете використовувати функцію range() разом із додатковим значенням кроку. Отже, діапазон (початок, кінець, крок) дасть початок послідовності, початок + крок, початок + 2*крок і так далі. Останнім значенням буде початок + k*крок, так що (початок + k*крок) < кінець і (початок + (k+1)*крок) > кінець.

Знайдіть у списку максимальні та мінімальні значення

Ви можете використовувати вбудовані функції max і min для обчислення максимального та мінімального елементів у списку відповідно.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 Примітка щодо багаторазового призначення

Зверніть увагу, що ми присвоїли значення min_elt і max_elt в одному операторі призначення. Python підтримує таке множинне призначення. І це може бути корисним під час розпакування ітерацій і присвоєння значень кільком змінним одночасно.

  7 надійних рішень Weather API для ваших розумних продуктів

Видалити дублікати зі списку

Іншою поширеною операцією є видалення дублікатів зі списків Python. Це необхідно, коли потрібно працювати тільки з унікальними значеннями. Найпростіший спосіб зробити це — перетворити список на набір.

Набір — це вбудована структура даних, усі елементи якої унікальні та хешуються.

>>> nums1 = [2,4,7,9,7,10]

У nums1 елемент 7 зустрічається двічі. Приведення його до набору видалить дублікат (тут, 7), залишивши нам список унікальних значень.

Оскільки нам ще потрібно попрацювати зі списком, ми перетворимо набір назад на список. Цю операцію можна виконати за допомогою такого рядка коду:

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 Щоб дізнатися більше про інші методи видалення дублікатів зі списків Python, перегляньте цей посібник.

Підрахунок випадків у списку

Щоб підрахувати, скільки разів елемент зустрічається в списку, ви можете використовувати вбудований метод count(). list.count(elt) повертає кількість разів, коли elt зустрічається у списку.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Тут 7 зустрічається один раз у списку nums, тому метод count() повертає 1.

>>> nums.count(7)
1

Перевірте, чи всі елементи в списку задовольняють умову

Щоб перевірити, чи всі елементи в списку задовольняють умову, ви можете скористатися вбудованою функцією Python all().

Функція all() приймає ітерований елемент як аргумент і повертає True, якщо всі елементи в ітеруючому об’єкті мають значення True (або правдиві).

Тут ми хотіли б перевірити, чи всі елементи в списку nums2 непарні.

>>> nums2 = [3,4,7,11,21,67,12]

Ми можемо використовувати розуміння списків, щоб створити список логічних значень, і ми можемо передати цей список як аргумент функції all().

Тут num%2!=0 буде False для елементів 4 і 12, які є парними. Таким чином, список логічних значень, створений за допомогою виразу розуміння списку, містить False (і all(list) повертає False).

>>> all([num%2!=0 for num in nums2])
False

💡 Важливо зазначити, що всі ([]) (all(any-empty-iterable) повертає True.

Перевірте, чи будь-який елемент у списку задовольняє умову

Щоб перевірити, чи задовольняє будь-який елемент у списку умову, можна скористатися функцією any(). any(some-list) повертає True, якщо принаймні один елемент має значення True.

>>> nums2 = [3,4,7,11,21,67,12]

Як і в попередньому прикладі, ми використовуємо розуміння списку, щоб отримати список логічних значень. Список nums містить парні числа. Отже, функція any() повертає True.

>>> any([num%2 for num in nums2])
True

Перевернути рядок

У Python рядки є незмінними, тому, коли ви хочете перевернути рядок, ви можете отримати лише перевернуту копію рядка. Існує два поширених підходи, обидва з яких можна записати як однорядковий код Python, які використовують нарізку рядків і вбудовані функції.

  Ansible для початківців – основи Ansible і як це працює

Використання нарізки рядків

Розрізання рядка з від’ємними значеннями кроку повертає фрагмент рядка, починаючи з кінця. Синтаксис рядковий[start:stop:step]. Отже, що повертає встановлення кроку -1 та ігнорування індексів початку та зупинки?

Він повертає копію рядка, починаючи з кінця рядка, включаючи кожен символ.

>>> str1[::-1]
'olleh'

Використання функції reversed().

Вбудована функція reversed() повертає зворотний ітератор над послідовністю.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

Ви можете використовувати його в поєднанні з методом join(), як показано:

>>> ''.join(reversed(str1))
'olleh'

Перетворення рядка на список символів

Припустімо, ми хочемо розділити рядок на список символів. Ми можемо зробити це за допомогою виразу розуміння списку.

>>> str1 = 'hello'

Розуміння списків є одним із найпотужніших однорядкових елементів у Python.

📒 Дізнайтеся більше про розуміння списків у Python.

Перебираємо рядок і збираємо кожен символ.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

Щоб розділити довший рядок на список рядків при кожному повторенні пробілу, ви можете використати метод split().

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

Ми вже бачили, як використовувати розуміння списку, щоб розділити рядок на список символів. У цьому прикладі ми зібрали всі символи, перебираючи рядок.

Тут нам потрібно прокрутити рядок і зібрати лише цифри. Отже, як нам це зробити?

  • Ми можемо встановити умову фільтрації у виразі розуміння списку за допомогою методу isdigit().
  • c.isdigit() повертає True, якщо c є цифрою; інакше він повертає False.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Перевірте, чи рядок починається з певного підрядка

Щоб перевірити, чи починається рядок з певного підрядка, ви можете використати метод рядка startswith(). str1.startswith(substring) повертає True, якщо str1 починається з підрядка. В іншому випадку він повертає False.

Ось кілька прикладів:

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

Перевірте, чи закінчується рядок певним підрядком

Як ви могли здогадатися, щоб перевірити, чи закінчується рядок даним підрядком, ви можете використовувати метод endswith().

>>> str5 = 'python'
>>> str5.endswith('on')
True

Ми також можемо використовувати метод string у виразі розуміння списку, щоб отримати ends_with, список логічних значень.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

Об’єднання елементів списку в рядок

Ми вже бачили, як розділити рядок на список символів. Тепер як ми виконуємо зворотну операцію об’єднання елементів списку в рядок?

  Як шукати та встановлювати програми на Apple Watch

Для цього можна використати рядковий метод join() із синтаксисом: separator.join(some-list).

Ми б лише хотіли об’єднати елементи зі списку в один рядок; нам не потрібен роздільник. Тому ми встановили роздільник на порожній рядок.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

Створіть словник Python

Подібно до того, як розуміння списків може допомогти нам створити нові списки з існуючих ітерацій, розуміння словників може допомогти нам створити нові словники з існуючих ітерацій.

Розуміння словників Python — це потужні однорядкові тексти, які можуть допомогти створити словник на льоту.

Тут у нас є імена, які є списком рядків.

>>> names = ['Joe','Amy','Jake','Florence']

Ми створюємо names_d, словник, який містить рядки імен як ключі та довжину рядків як значення.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

Умовне присвоєння значень змінним

Іноді може знадобитися присвоїти значення змінним залежно від конкретної умови.

Наприклад, ви можете прочитати введені користувачем, скажімо, вік людини. І залежно від введеного значення ви можете вирішити, чи дозволено їм відвідувати вечірку.

Щоб виконати це умовне присвоєння в Python, ви можете написати наступний однорядковий текст за допомогою тернарного оператора.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 Дізнайтеся більше про тернарний оператор у Python.

Згенерувати всі перестановки

Перестановка відноситься до можливого розташування елементів у групі. Якщо в групі n унікальних елементів, їх n! можливі способи їх розташування, а отже, n! перестановки.

Давайте використаємо наступні літери списку:

>>> letters = ['a','b','c']

Ви можете використовувати перестановки з модуля itertools для генерації всіх можливих перестановок даного iterable.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

Як бачимо, використання permutations(iterable) повертає об’єкт перестановки, який ми можемо виконати за допомогою циклу for:

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

Але ми можемо переписати його як однорядковий вираз, перетворивши об’єкт перестановки в список:

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Тут є три унікальні елементи та 3!=6 можливих перестановок.

Створення підмножин списку

Іноді вам може знадобитися побудувати всі можливі підмножини певного розміру зі списку або інших ітерованих елементів. Давайте використаємо список літер і отримаємо всі підсписки розміру 2.

Для цього ми можемо використовувати комбінації з модуля itertools, наприклад:

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Висновок

У цьому підручнику ми розглянули корисні однорядкові Python для виконання типових операцій зі списками та рядками. Ми також навчилися використовувати однострокові функції, як-от список і словник Python, і як використовувати їх у поєднанні з вбудованими функціями для виконання бажаних завдань.

Як наступний крок перегляньте цей список проектів Python, зручних для початківців.