Беглый взгляд на списки

Списки были одной из первых вещей, которые я узнал, когда начал изучать Python, и вскоре я понял, что они являются часто используемой функцией языка программирования. Список на языке Python - это упорядоченная и изменяемая структура данных, которая содержит набор элементов, хранящихся в скобках []. Списки могут содержать дубликаты, и отдельные элементы в списке могут быть вызваны с использованием соответствующего значения индекса, начиная с [0,…, n]. Элементы в списке можно удалять, изменять или добавлять, что делает списки адаптируемым способом работы с данными. Существует масса ресурсов, которые помогут вам узнать больше о списках Python, но вот пример:

#example list
color_list = ["green", "red", "blue", "yellow"]

Начиная со списков

Один из «питонических» способов работы со списками называется понимание списков. Составление списка - это синтаксическая конструкция, которая позволяет создавать список на основе существующих списков. Общий синтаксис следующий:

#new_list = [(output value)(for loop)(logical conditions)]
#example list comprehension
green_list = [color for color in color_list if color == 'green']

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

green_list2 = []
for color in color_list:
    if color == 'green':
        green_list2.append(color)

Моя Эврика! Момент с пониманием списка

Прежде чем я начал изучать Python, я был знаком с SQL и ежедневно использовал его в своей работе. SQL (язык структурированных запросов) обычно используется для управления данными в реляционных базах данных, таких как MySQL и Microsoft SQL Server. Когда я был новичком в Python, списки казались довольно простыми и простыми для применения во многих отношениях, но понимание списков было мне трудным для понимания. Синтаксис меня напугал, поэтому я избегал их использования. Однажды, работая с упражнением на Python, я писал понимание списка и внезапно понял, что синтаксис напоминает оператор SQL SELECT. Это была Эврика! момент для меня и дал мне уверенность в том, что я могу проявить творческий подход.

#SQL select statement example
#SELECT color FROM color_list WHERE color IN ('green', 'red', 'blue')
#list comprehension selecting the same data as the SQL statement
rgb = [color for color in color_list if color in('green', 'red', 'blue')]
print(rgb)

Легко увидеть, как представление списка напоминает оператор выбора SQL.

Больше понимания списков

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

Два способа сопоставления значений с использованием списков

#create numeric indicators for colors
color_indicator = [0 if color == 'green'else 1 if color == 'red' else 2 if color == 'blue' else 3 for color in color_list]
print(color_list)
print(color_indicator)

color_mapping = {'green': 0, 'red': 1, 'blue':2, 'yellow':3}
color_indicator2 = [color_mapping[color] if color in color_mapping else 'na' for color in color_list]
print(color_list)
print(color_indicator2)

Поиск предметов длины n

Допустим, мы хотим найти в нашем списке все цвета, длина которых превышает 5 символов.

long_color_words = [color for color in color_list if len(color) > 5]
long_color_words

Между логикой тоже легко скопировать. Мы можем найти все цвета длиной от 4 до 6:

color_length5 = [color for color in color_list if len(color) > 4 and len(color) < 6]
color_length5

Вложенные петли

Вы можете вкладывать циклы для выполнения операций и возврата матрицы. Здесь мы создаем матрицу атрибутов цвета:

color_list1 = ['green', 'red', 'blue', 'yellow']
color_list2 = ['dark', 'bright', 'tinted', 'glowing']
color_matrix = [[color2 + ' ' + color1 for color1 in color_list1] for color2 in color_list2]
color_matrix

Заключительные замечания

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

Благодарю вас!

- Эрик Клеппен