Сохраните в закладках эту статью, если вы новичок в Python (особенно если изучаете Python сами)

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


2020-04-20 14:34

разработка по

Представляю вашему вниманию перевод статьи "Bookmark this if you are new to Python (especially if you self-learn Python)" в двух частях (1, 2) c простыми, но полезными советами и трюками в Python.

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

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

Содержание

  • Сравнение значений
  • Условный оператор возврата
  • Назначение нескольких переменных из списка/кортежа в одну строку
  • Генерация списков
  • Используйте zip для сравнения элементов в двух списках
  • Используйте lambda для сортировки вложенного массива по второму элементу
  • filter, map
  • Проверка, все ли элементы в списке уникальные
  • Форматирование строк
  • enumerate
  • Получение определенной части массива
  • Комбинации и перестановки
  • Одновременное обновление нескольких переменных
  • Получение строки из списка
  • Underscore (нижнее подчеркивание)
  • Dict.keys, Dict.values, Dict.items
  • Сравнение двух множеств
  • collections.Counter
  • Заключение

Сравнение значений

>>> a = 1 >>> b = 3 >>> a == 1 True >>> a == 2 False >>> a == b False >>> a > b False >>> a <= b True >>> if a <= b : ...     print('a is less than or equal to b') ... a is less than or equal to b

Вы можете сравнить значения двух объектов. Результатом будет True или False. Вы можете использовать сравнение непосредственно в качестве условия в операторе if-else.

Условный оператор возврата

Вместо

>>> def compare(a,b): ...     if a> b: ...             return a ...     else: ...             return b ...

вы можете поместить условие непосредственно после оператора return.

>>> def compare(a, b): ...     return a if a > b else b ...

Назначение нескольких переменных из списка/кортежа в одну строку

Вместо

>>> arr_list = [1,4,7] >>> a = arr_list[0] >>> b = arr_list[1] >>> c = arr_list[2]

вы можете сделать то же самое, но в одну строку:

>>> a, b, c = arr_list >>> a 1 >>> b 4 >>> c 7

Генерация списков

Вместо

>>> arr_list = [1,4,7] >>> result = [] >>> for i in arr_list: ...     result.append(i*2) ... >>> result [2, 8, 14]

вы можете сделать так:

>>> result = [x*2 for x in arr_list] >>> result [2, 8, 14]

Используйте zip для сравнения элементов в двух списках

Вместо

>>> a = [1,5,8] >>> b = [3,4,7] >>> result = [] >>> for i in range(len(a)): ...     result.append(a[i] if a[i] < b[i] else b[i]) ... >>> result [1, 4, 7]

можно так:

>>> result = [min(i) for i in zip(a,b)] >>> result [1, 4, 7]

Используйте lambda для сортировки вложенного массива по второму элементу

>>> arr_list= [[1,4], [3,3], [5,7]] >>> arr_list.sort(key=lambda x: x[1]) >>> arr_list [[3, 3], [1, 4], [5, 7]]

filter, map

Вместо

>>> arr_list = [-1, 1, 3, 5] >>> result = [] >>> for i in arr_list: ...     if i > 0: ...             result.append(i**2) ... >>> result [1, 9, 25]

делайте так

>>> result = list(map(lambda x: x**2, filter(lambda x: x > 0, arr_list))) >>> result [1, 9, 25]

Поправка: виноват-виноват, можно еще лучше с помощью генерации списков :)

Спасибо Oleg Kapustin и Kuldeep Pal.

>>> result = [i**2 for i in arr_list if i > 0] >>> result [1, 9, 25]

Проверка, все ли элементы в списке уникальные

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

>>> arr_list = [1,4,4,6,9] >>> len(arr_list) == len(set(arr_list)) False

Форматирование строк

>>> pi = 3.14159 # До Python3.6 >>> print('The value of pi is {:.2f}'.format(pi)) The value of pi is 3.14  >>> a, b, c = 1,5,9 >>> print('a is {}; b is {}; c is {}'.format(a,b,c)) a is 1; b is 5; c is 9  # С Python3.6+ >>> print(f'The value of pi is {pi:.2f}') The value of pi is 3.14 >>> pi 3.14159  >>> print(f'a is {a}; b is {b}; c is {c}') a is 1; b is 5; c is 9

Одним из преимуществ форматирования строк является возможность вывода числового значения с округлением без влияния на точность исходного значения.

Дополнительная информация: PyFormat

enumerate

Вместо

>>> arr_list = [1, 5, 9] >>> for i in range(len(arr_list)): ...     print(f'Index: {i}; Value: {arr_list[i]}') ... Index: 0; Value: 1 Index: 1; Value: 5 Index: 2; Value: 9

можно так:

>>> for i, j in enumerate(arr_list): ...     print(f'Index: {i}; Value: {j}') ... Index: 0; Value: 1 Index: 1; Value: 5 Index: 2; Value: 9

Получение определенной части массива

>>> arr_list = [1,4,6,8,10,11] >>> a, *b, c = arr_list >>> a 1 >>> b [4, 6, 8, 10] >>> c 11

Комбинации и перестановки

Используйте возможности itertools

>>> str_list = ['A', 'C', 'F'] >>> list(itertools.combinations(str_list,2)) [('A', 'C'), ('A', 'F'), ('C', 'F')] >>> list(itertools.permutations(str_list,2)) [('A', 'C'), ('A', 'F'), ('C', 'A'), ('C', 'F'), ('F', 'A'), ('F', 'C')]

Одновременное обновление нескольких переменных

Вместо

>>> a = 5 >>> b = 8 >>> temp = a >>> a = b >>> b = temp + a >>> a 8 >>> b 13

Вы можете делать вычисление обеих переменных в одной строке. В этом случае не нужно создавать временную переменную.

>>> a = 5 >>> b = 8 >>> a,b = b, a+b >>> a 8 >>> b 13

(PS: Что же это? Последовательность Фибоначчи!)

Дополнительная информация: Evaluation order

Получение строки из списка

>>> str_list = ['This', 'is', 'WYFok'] >>> ' '.join(str_list) 'This is WYFok'

Можно объединить все элементы, которые должны быть в строковых форматах, в строку с помощью функции join. Только необходимо добавить разделитель между элементами.

>>> ans_list = [3,6,9] >>> 'The answer is '+','.join(map(str,ans_list)) 'The answer is 3,6,9'

С помощью функции map можно преобразовать целочисленные элементы в строки, и в сочетании с функцией join вы получите новую строковую переменную.

Дополнительная информация: str.join, map

Underscore (подчеркивание)

Обычно, если требуется повторить шаг, используется цикл for, как показано ниже:

>>> for i in range(3): ...     print('Hello') ... Hello Hello Hello

Можно увидеть, что переменная i не используется в этом цикле for. В этой ситуации вместо i можно использовать _ (подчеркивание). ( _ – просто имя переменной, и в Python его принято использовать для игнорируемых переменных. Это означает, что переменная цикла фактически не используется.)

>>> for _ in range(3): ...     print('Hello') ... Hello Hello Hello

Dict.keys, Dict.values, Dict.items

>>> teacher_subject = {'Ben':'English','Maria':'Math','Steve':'Science'} >>> teacher_subject.keys() dict_keys(['Ben', 'Maria', 'Steve']) >>> teacher_subject.values() dict_values(['English', 'Math', 'Science']) >>> teacher_subject.items() dict_items([('Ben', 'English'), ('Maria', 'Math'), ('Steve', 'Science')])

Для словаря можно использовать функции keys и values для извлечения ключей и значений соответственно. С помощью функции items можно извлекать сразу и ключи, и значения вместе. Это полезно, если вам нужно переключаться между ключами и значениями.

>>> subject_teacher = {y:x for x,y in teacher_subject.items()} >>> subject_teacher {'English': 'Ben', 'Math': 'Maria', 'Science': 'Steve'}

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

(Дополнительно: С zip вы можете сформировать словарь из двух списков)

>>> subject = ['English','Math','Scienc'] >>> teacher = ['Ben','Maria','Steve'] >>> subject_teacher = {f:v for f,v in zip(subject,teacher)} >>> subject_teacher {'English': 'Ben', 'Math': 'Maria', 'Scienc': 'Steve'}

Дополнительная информация: Mapping Types — dict

Сравнение двух множеств

>>> a = {1,2,3} >>> b = {1,2,3,4,5} # a подмножество b? >>> a<=b True # a подмножество b? >>> a>=b False # Объединение a и b  >>> a.union(b) {1, 2, 3, 4, 5} # Пересечение a и b  >>> a.intersection(b) {1, 2, 3} # Разница  # Вернет элементы из a, но не из b  >>> a.difference(b) set() # Вернет элементы из b, но не из a >>> b.difference(a) {4, 5}

Дополнительная информация: Set

collections.Counter

Это удобно, если требуется подсчитать количество всех элементов в списке. Появится объект класса Counter, отображающий все уникальные элементы списка с соответствующим количеством этих элементов в списке.

>>> import collections >>> arr_list = [1,1,1,1,2,2,2,3,3,5,5,5,7] >>> c = collections.Counter(arr_list) >>> c Counter({1: 4, 2: 3, 5: 3, 3: 2, 7: 1}) >>> type(c) <class 'collections.Counter'> >>> c[1] 4 >>> c[6] 0 # Приводим обратно к словарю >>> dict(c) {1: 4, 2: 3, 3: 2, 5: 3, 7: 1}

Дополнительная информация: collections.Counter

Заключение

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


Источник: habr.com

Комментарии: