Будь вы старшим инженером AI или студентом первого курса биологии — рано или поздно вы столкнётесь с языком программирования Python. После релиза, в 1991 году, Python быстро стал любимым языком программистов и технологов. Согласно рейтингу Stack Overflow, основанному на проявлении интереса к языкам, в развитых странах, Python быстро набирает популярность.
Python — высокоуровневый, интерпретируемый язык с относительно простым синтаксисом, идеально подойдет даже тем, кто ранее не программировал. Популярные библиотеки Python, хорошо интегрированы и используются в различных областях, например в биоинформатике (biopython), науке о данных (pandas), машинном обучении (keras/tensorflow) и даже в астрономии (astropy). После изучения C и Java, в качестве моих первых языков программирования, на освоение Python мне понадобилось несколько недель, достаточно было погуглить. Код выполняется гораздо медленнее, чем в Java и других языках, тем не менее Python на самом деле повышает продуктивность, благодаря хорошо налаженной интеграции процессов.
Уловка №1: Сила «однострочников» (One-Liners)
Вы устали пробираться между строк кода и теряться в условных конструкциях? Тогда, однострочники Python — это то, что вам нужно. Например, такая конструкция:
>>> if alpha > 7:
>>> beta = 999
>>> elif alpha == 7:
>>> beta = 99
>>> else:
>>> beta = 0
может быть упрощена:
>>> beta = 999 if alpha > 7 else (beta == 99 if alpha == 7 else 0)
До смешного просто! Если уделять больше внимания коду, который вы пишите, всегда найдется место, где можно упростить его однострочником. Кроме условных конструкций, упрощать можно и циклы for
. Например, удвоение списка целочисленных, в четырех строках:
lst = [1, 3, 5]
doubled = []
for num in lst:
doubled.append(num*2)
можно упростить до одной строки:
doubled = [num * 2 for num in lst]
Конечно, если всюду использовать однострочники, это будет выглядеть неопрятно. Старайтесь не переусердствовать с сокращениями в своём коде, кто-то даже скажет, что широкое применение такого подхода — не канон.
>>> import pprint; pprint.pprint(zip(('Byte', 'KByte', 'MByte', 'GByte', 'TByte'), (1 << 10*i for i in xrange(5))))
Уловка №2: Быстрые действия со строками
Манипуляции со строками порой вызывают сложности, но в Python есть сокращения, которые облегчат вашу жизнь. Чтобы сделать реверс строки, просто добавьте ::-1
в качестве списка индексов.
>>> a = "ilovepython"
>>> print a[::-1]
nohtypevoli
Такую уловку можно применить и к списку с числами. Манипулировать строками в Python, чрезвычайно просто. Например, вам нужно вывести предложение, используя предопределённые переменные: str1
, str2
и lst3
>>> str1 = "Totally"
>>> str2 = "Awesome"
>>> lst3 = ["Omg", "You", "Are"]
Просто используйте метод .join()
и арифметические операторы, чтобы создать нужное предложение.
>>> print ' '.join(lst3)
Omg You Are
>>> print ' '.join(lst3)+' '+str1+' '+str2
Omg You Are Totally Awesome
Кроме действий со строками, рекомендую изучить больше о regex(регулярных выражениях), чтобы эффективно использовать шаблоны фильтров и поиск в стоках.
Уловка №3 Комбинации вложенных списков
Пожалуй, одна из моих любимых библиотек в Python — это itertools.
Чтобы преобразить код, содержащий десятки списков, в глубоко вложенный список, достаточно нескольких манипуляций. itertools
именно то, что вам нужно, чтобы решить эту задачу.
>>> import itertools
>>> flatten = lambda x: list(itertools.chain.from_iterable(x))
>>> s = [['"', 'An', 'investment'], ['in'], ['knowledge'], ['pays'], ['the', 'best'], ['interest."', '--'], ['Benjamin'], ['Franklin']]
>>> print(' '.join(flatten(s)))
" An investment in knowledge pays the best interest." -- Benjamin Franklin
Из приведенного выше примера видно, как мы можем объединить вложенные списки и строки с помощью .join()
и itertools
. Метод .combinations()
из библиотеки itertools
, мощный инструмент, для возврата длины последовательностей элементов, из входных итераций. Нажмите здесь, чтобы узнать больше об itertools
.
Уловка №4 Простые структуры данных
Возвращаясь к пункту №1. Однострочником, также очень просто вызвать инициализацию структур данных в Python. Гарольд Купер, реализовал однострочную древовидную структуру, используя следующий код:
>>> def tree(): return defaultdict(tree)
Приведенный выше код просто определяет древо, которое является словарём, со значением по умолчанию tree. Другие однострочные функции, как например генератор простых чисел:
>>> reduce( (lambda r,x: r-set(range(x**2,N,x)) if (x in r) else r),
range(2,N), set(range(2,N)))
можно найти на Github и Stack Overflow. Также в Python есть мощная библиотека Collections
, которая поможет решить множество насущных проблем, без написания длинного кода.
>>> from collections import Counter
>>> myList = [1,1,2,3,4,5,3,2,3,4,2,1,2,3]
>>> print(Counter(myList))
Counter({2: 4, 3: 4, 1: 3, 4: 2, 5: 1})
Уловка №5 Упрощенный вывод данных
Хотел бы я узнать раньше об этом трюке. Он позволяет вывести строчный массив одной строкой, с разделением запятыми. Нам не нужно использовать .join()
и циклы.
>>> row = ["1", "bob", "developer", "python"]
>>> print(','.join(str(x) for x in row))
1,bob,developer,python
Можно использовать однострочник:
>>> print(*row, sep=',')
1,bob,developer,python
Еще один элегантный способ вывода, использовать enumerate .
Эта встроенная в Python функция невероятно полезна. Так, вместо четырёх строк кода:
iterable = ['a','b','c']
c = 0
for item in iterable:
print c, item
c+= 1
0 a
1 b
2 c
тоже самое, можно записать двумя:
for c, item in enumerate(iterable):
print c, item
В Python, есть еще сотни тысяч подобных уловок, например pprint
для форматирования кода.