10 хитростей, которые сделают ваш код Python индивидуальным и улучшат его

Хотя на первый взгляд Python может показаться языком простоты, который может изучить каждый, и это так, многие могут быть удивлены, узнав, сколько мастерства можно получить на этом языке. Python - одна из тех вещей, которым довольно легко научиться, но может быть сложно освоить. В Python часто есть несколько способов сделать что-то, но можно легко сделать что-то неправильное или заново изобрести стандартную библиотеку и тратить время просто потому, что вы не знали о существовании модуля.

К сожалению, стандартная библиотека Python - довольно громадный зверь, и, кроме того, ее экосистема ужасающе огромна. Хотя существует, вероятно, два миллиона гигабайт модулей Python, есть несколько полезных советов, которые вы можете изучить с помощью стандартной библиотеки и пакетов, обычно связанных с научными вычислениями в Python.

№1: Обратная струна

Хотя это может показаться довольно простым, реверсирование строки с помощью цикла char может быть довольно утомительным и раздражающим. К счастью, Python включает в себя простую встроенную операцию для выполнения именно этой задачи. Для этого мы просто обращаемся к индексу :: - 1 в нашей строке.

a = "!dlrow olleH"
backward = a[::-1]

№2: Тусклости как переменные

В большинстве языков, чтобы получить массив в набор переменных, нам нужно либо циклически перебирать значения, либо получать доступ к тусклым изображениям по позиции, например так:

firstdim = array[1]

Однако в Python есть способ сделать это круче и быстрее. Чтобы преобразовать список значений в переменные, мы можем просто установить имена переменных, равные массиву с той же длиной, что и массив:

array = [5, 10, 15, 20]
five, ten, fift, twent = array

№3: Itertools

Если вы собираетесь потратить какое-то время на Python, вам обязательно захочется познакомиться с itertools. Itertools - это модуль в стандартной библиотеке, который позволит вам постоянно обходить итерацию. Это не только значительно упрощает кодирование сложных циклов, но и делает ваш код более быстрым и лаконичным. Вот только один пример использования Itertools, но их сотни:

c = [[1, 2], [3, 4], [5, 6]]
# Let's convert this matrix to a 1 dimensional list.
import itertools as it
newlist = list(it.chain.from_iterable(c))

№4: Интеллектуальная распаковка

Итеративная распаковка значений может быть довольно трудоемкой и трудоемкой. К счастью, в Python есть несколько интересных способов распаковки списков! Одним из примеров этого является *, который заполнит неназначенные значения и добавит их в новый список под нашим именем переменной.

a, *b, c = [1, 2, 3, 4, 5]

№5: Перечислить

Если вы не знаете, что такое перечисление, возможно, вам стоит с ним познакомиться. Enumerate позволит вам получить индексы определенных значений в списке. Это особенно полезно в науке о данных при работе с массивами, а не с фреймами данных.

for i,w in enumerate(array):
    print(i,w)

№6: Именные кусочки

Разрезать списки в Python невероятно просто! Для этого можно использовать всевозможные отличные инструменты, но, безусловно, ценным является возможность давать названия фрагментам вашего списка. Это особенно полезно для линейной алгебры в Python.

a = [0, 1, 2, 3, 4, 5]
LASTTHREE = slice(-3, None)
slice(-3, None, None)
print(a[LASTTHREE])

№7: Групповые смежные списки

Группировка смежных циклов, безусловно, может быть довольно легко выполнена в цикле for, особенно с помощью zip (), но это, безусловно, не лучший способ сделать что-то. Чтобы упростить и ускорить работу, мы можем написать лямбда-выражение с zip, которое будет группировать наши смежные списки следующим образом:

a = [1, 2, 3, 4, 5, 6]  
group_adjacent = lambda a, k: zip(*([iter(a)] * k)) 
group_adjacent(a, 3) [(1, 2, 3), (4, 5, 6)] 
group_adjacent(a, 2) [(1, 2), (3, 4), (5, 6)] 
group_adjacent(a, 1)

№8: итерация next () для генераторов

В большинстве обычных сценариев программирования мы можем получить доступ к индексу и получить номер нашей позиции с помощью счетчика, который будет просто значением, добавляемым к:

array1 = [5, 10, 15, 20]
array2 = (x ** 2 for x in range(10))
counter = 0
for i in array1:
# This code wouldn't work because 'i' is not in array2.
   # i = array2[i]
    i = array2[counter]
#    ^^^ This code would because we are accessing the position of i

Однако вместо этого мы можем использовать next (). Далее требуется итератор, который сохранит нашу текущую позицию в памяти и будет выполнять итерацию по нашему списку в фоновом режиме.

g = (x ** 2 for x in range(10))
print(next(g))
print(next(g))

№9: Счетчик

Еще один замечательный модуль из стандартной библиотеки - это коллекции, и сегодня я хотел бы вам представить счетчик из коллекций. Используя Counter, мы можем легко получить количество списков. Это полезно для получения общего количества значений в наших данных, получения нулевого числа наших данных и просмотра уникальных значений наших данных. Я знаю, о чем ты думаешь,

«Почему бы просто не использовать Pandas?»

И это, безусловно, верный момент. Однако использование Pandas для этого, безусловно, будет намного сложнее автоматизировать, и это просто еще одна зависимость, которую вам нужно будет добавить в свою виртуальную среду всякий раз, когда вы развертываете свой алгоритм. Кроме того, тип счетчика в Python имеет множество функций, которых нет в Pandas Series, что может сделать его гораздо более полезным в определенных ситуациях.

A = collections.Counter([1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7]) 
A Counter({3: 4, 1: 2, 2: 2, 4: 1, 5: 1, 6: 1, 7: 1}) 
A.most_common(1) [(3, 4)] 
A.most_common(3) [(3, 4), (1, 2), (2, 2)]

№10: Dequeue

Еще одна замечательная вещь, выходящая из модуля коллекций, - это удаление из очереди. Проверьте все, что мы можем делать с этим типом!

import collections
Q = collections.deque() 
Q.append(1) 
Q.appendleft(2) 
Q.extend([3, 4]) 
Q.extendleft([5, 6]) 
Q.pop()
Q.popleft()
Q.rotate(3) 
Q.rotate(-3)
print(Q)

Заключение

Итак, вот некоторые из моих любимых приемов Python, которые я использую все время. Хотя некоторые из них могут использоваться немного реже, эти приемы, как правило, очень универсальны и полезны. К счастью, набор стандартных библиотечных функций Python определенно не начинает обнажаться, и внутри него определенно больше инструментов. Скорее всего, есть такие, о которых я даже не знаю, так что всегда есть чему поучиться, что интересно!