Цикл 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 Новости📰|Дополнительно.
Если этот пост был полезен, пожалуйста, несколько раз нажмите кнопку аплодисментов 👏 ниже, чтобы выразить свою поддержку автору 👇