Вот все, что вам нужно знать об использовании этой удивительной возможности Python, которая в одночасье повысит вашу производительность и читабельность кода
Возможно, вы слышали о возможности Python по обработке списков. Возможно, вы даже использовали его, не понимая сути. Сейчас самое время научиться, так как мы расскажем обо всем, что вам нужно знать о понимании списков в Python
Прежде чем приступить к работе, стоит освежить в памяти, как работают массивы и списки в Python и как использовать словари Python
Что такое понимание списков в Python?
Понятие ‘понимание списка’ звучит сложно, но на самом деле это не так. В Python это просто быстрый способ фильтрации или уточнения списка на основе некоторых критериев
Это избавляет вас от необходимости писать несколько строк кода (особенно если вы уже находитесь в цикле), и сохраняет читабельность вашего кода
Однако будьте осторожны, поскольку понимание списка не всегда является решением. Легко увлечься и написать сложные понимания, которые трудно читать. Иногда лучше написать больше кода, особенно если это улучшает читаемость. Придерживайтесь простых задач и ограничивайте код одной обязанностью
Как использовать понимания списков в Python
Примечание: Все эти примеры используют Python 3. 6. Если вы не уверены в различиях между Python 3 и Python 2, то обязательно прочитайте наш FAQ по Python, где мы рассматриваем этот и другие вопросы
Рассмотрим этот фрагмент кода, который копирует массив и превращает каждую букву в этом массиве в заглавную. Это делается путем перебора каждого элемента массива:
letters = 'a''b''c''d'
print(letters)
upper_letters =
for letterinletters:
result = letter.upper()
upper_letters.append(result)
print(upper_letters)
Теперь вот та же самая логика, только выполненная в одной строке кода с использованием базового понимания списка в Python:
letters = 'a''b''c''d'
print(letters)
upper_letters = x.upper()forinletters
print(upper_letters)
Как вы можете видеть, результат точно такой же, но процесс включает в себя значительно больше кода без понимания списка
Давайте разберем этот простой пример
Этот пример создает список под названием буквы. В нем хранятся строчные буквы ‘a’, ‘b’, ‘c’ и ‘d’. Предположим, вы хотите, чтобы все эти элементы списка были прописными? Без понимания списка вам придется создать новый список для хранения результата (с именем upper_letters ), перебрать все элементы списка letters , преобразовать каждую букву (и сохранить ее в result – опционально, но хорошая практика), а затем добавить прописную букву в новый список. Сколько работы!
Понимание списка здесь почти точно эквивалентно альтернативе цикла. Оно фактически говорит: ‘Для каждой буквы в списке letters преобразуйте ее в прописную и верните результат в виде нового списка’
Понимание списка может работать только со списками и должно возвращать новый список. Давайте копнем глубже
Понимание списка состоит из трех частей (третью часть мы рассмотрим ниже). Понимание списка должно начинаться и заканчиваться квадратными скобками ( и ). Так было задумано, и это дает Python понять, что вы будете работать со списком
Внутри квадратных скобок нужно начать с результата. Это то, что вы хотите сделать с каждым элементом списка
В приведенном выше примере следующий код преобразует каждый элемент (на который ссылается имя переменной x ) в верхний регистр с помощью метода upper() , который является частью основной библиотеки Python:
x.upper()# will not run, only half the comprehension at this point
Далее необходимо указать Python, с каким списком работать, и присвоить переменной каждый отдельный элемент. Это точно то же самое, что и цикл for в длинном примере:
forinletters
Каждый раз, когда цикл проходит по списку, значение x будет меняться на значение текущего элемента. Вначале это будет ‘a’, затем ‘b’ и так далее
Если собрать все это вместе (и присвоить переменной upper_letters ), то все будет готово:
upper_letters = x.upper()forinletters
Теперь upper_letters будет содержать список заглавных букв, начиная с ‘A’, затем ‘B’ и так далее
Третья часть понимания списков в Python
Как мы уже упоминали выше, существует третья часть понимания списка
Выполнив два вышеописанных шага, вы можете включить необязательное условие. Это похоже на использование оператора if для того, чтобы сказать: ‘Создайте новый список на основе старого, но включите в него только те элементы, которые соответствуют моим критериям’
Вот как это выглядит:
ages = 3457356
print(ages)
old_ages = xforinagesifx >10
print(old_ages)
В этом примере используется новый список ages. Список old_ages собирается с помощью понимания списка. Условие if в конце означает, что в новый список вставляются только те элементы списка, которые удовлетворяют заданным критериям. В этом примере разрешены любые возрасты, превышающие десять лет
Когда не следует использовать списковые понимания Python
Понимание списков – замечательная вещь, когда вы освоите ее, но она полезна не при всех обстоятельствах. Вероятно, не стоит использовать его, когда вам нужно более одного условия:
old_ages = xforinagesifx >10andx <100andisnotNone
Этот код работает, но он начинает становиться длинным и запутанным. Аналогично, все, что больше, чем простой вызов функции, может не работать. В этом примере вы получите ошибку:
letters = 'a''b''c''d'
print(letters)
upper_letters = x.upper()forinletters
print(upper_letters)
Это вполне корректный код, но поскольку вы не можете написать число в верхнем регистре, он не будет работать. Это тот случай, когда более длинный цикл предпочтительнее, так как вы сможете сделать некоторую обработку исключений:
letters = 'a''b''c''d'
print(letters)
upper_letters =
for letterinletters:
try:
result = letter.upper()
upper_letters.append(result)
exceptAttributeError:
pass# do nothing
print(upper_letters)
Начните применять списковые понимания Python
Теперь, когда вы знаете, насколько просто в Python реализовано понимание списков, нет причин не использовать его. Просто помните, что все должно быть просто, а удобство чтения превыше всего
Может быть, вы будете управлять Arduino с помощью Python, или как насчет сетевой камеры безопасности DIY Python?
Комментировать