Цикл for против понимания списка. Возможно, вы сталкивались с присваиванием массива, но с циклами for и if внутри. Если у вас есть опыт работы с такими языками, как C, C++, C#, вы можете подумать: «Что это вообще такое?»

Массив против списка

Прежде всего, давайте подготовим почву, поняв, что в Python нет такой вещи, как тип Array. Он имеет тип List, который работает как массив, каким мы его знаем.

Список Python может быть объявлен и инициализирован как:

countries = {“Australia”, “Belgium”, “Czechoslovakia”, “Djibouti”, “Ethiopia”}

Доступ к определенным элементам в списке можно получить, используя его индекс, например. print(countries[1])подарит вам Belgium.

В качестве примера предположим, что мы хотим отфильтровать страны только с 8 символами. Традиционным способом мы бы кодировали так.

countries = {“Australia”, “Belgium”, “Czechoslovakia”, “Djibouti”, “Ethiopia”}
countries8char=[]
for country in countries:
  if (len(country) = 8):
    countries8char.append(country)
print(countries8char)

Это приведет к:

['Djibouti', 'Ethiopia']

Теперь мы можем сжать операторы for и if в одну строку кода на Python.

countries = {“Australia”, “Belgium”, “Czechoslovakia”, “Djibouti”, “Ethiopia”}
countries8char=[]
countries8char = [ country for country in countries if len(country) = 8 ]
print(countries8char)

Выделенная жирным шрифтом строка кода выше в основном означает добавление значения страны к массиву country8char, если длина элемента в массиве стран равна 8.

Однострочный метод добавления значений в новый массив путем циклического перебора существующего массива с применением некоторого фильтра называется Понимание списка. Его синтаксис можно разделить на [{Output} {Collection} {Condition}]. Мы фильтруем {Collection} с заданным {Condition}, чтобы получить {Output}.

Зачем понимать список?

Основная причина использования понимания списка заключается в том, что это намного быстрее, чем добавление элемента за элементом. array.append() требует загрузки массива, добавления нового значения и сохранения полученного массива. Понимание списков не требует загрузки и выгрузки массива при каждом проходе. Когда массив становится достаточно большим, заметно улучшение быстродействия.

Другие примеры

Помимо фильтрации существующего массива, понимание списка также можно использовать по-разному. Например. для обновления нового пароля, если правило нового пароля состоит в том, что не должно быть символов, которые использовались в предыдущем пароле:

current_pwd = 'PaSsWoRd'
new_pwd = 'Fol10wMe'
current_char = [ x for x in current_pwd]
new_char = [ x for x in new_pwd ]
print(current_char) # ['P', 'a', 'S', 's', 'W', 'o', 'R', 'd']
print(new_char) # ['F', 'o', 'l', '1', '0', 'M', 'e']
repeat_char = [ x for x in new_char if x in current_char ]
if len(repeat_char) = 0: # no char repeated, hence 0 length
  SaveNewPassword()
else:
  print("Your new password has used characters: " + repeat_char)

Можете ли вы придумать еще примеры? Попробуйте этот метод и обнаружите, что есть много случаев, когда понимание списков может помочь вам управлять массивами!

Затем к спискам применялся расширенный фильтр с использованием key и lambda. Читай здесь!

Присоединяйтесь к FAUN: Сайт💻|Подкаст🎙️|Twitter🐦|Facebook👥 |Instagram📷|Группа Facebook🗣️|Группа Linkedin💬| Slack 📱|Cloud Native Новости📰|Дополнительно.

Если этот пост был полезен, пожалуйста, несколько раз нажмите кнопку аплодисментов 👏 ниже, чтобы выразить свою поддержку автору 👇