Практикуемся в работе с частью списка. Темы нарезаны, зацикливаются на фрагменте и копируют список.

Если вы не можете его прочитать, нажмите мою Ссылку друга!

Мы уже знаем, что такое список Python и как работать только с частью списка и даже как его копировать. А мы?

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

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

Работа с частью списка

Мы знаем, как получить доступ к отдельным элементам в списке и как работать со всеми элементами в списке. Теперь пора поработать с определенной частью списка, которую Python называет срезом.

Нарезка списка

Чтобы работать с определенной группой элементов в списке, нам нужно указать индекс первого и последнего элементов, с которыми мы хотим работать. Как и в случае с функцией range(), Python останавливает один элемент перед указанным нами вторым параметром.

Возьмем пример.

my_string = “Hello, Python!”
my_list = list(my_string)
print(my_list[0:3])            #1

Код под номером 1 печатает фрагмент списка, который включает первые 3 буквы: «H», «e» и «l». Обратите внимание, что для нарезки требуются квадратные скобки [ ]. Кроме того, для разделения параметров требуется двоеточие (:), а для функции range() требуется запятая (,) для разделения параметров.

Протокол нарезки [start:end:increment]. Как обычно, значение по умолчанию start равно 0 и может быть опущено, значение по умолчанию increment равно 1 и также может быть опущено. Значение по умолчанию end - это длина списка, и его также можно не указывать. Обратите внимание, что end - это индекс, который нужно исключить.

Ух ты, все три параметра можно не указывать. Тогда возможно выражение типа my_list[::]. Давайте рассмотрим все возможные комбинации срезов в следующем разделе.

Зацикливание на срезе

Мы можем использовать нарезку в for цикле. Длина строки в нашем примере - 14.

my_string = “Hello, Python!”
my_list = list(my_string)
for val in my_list[0:14]:
    print(val)

Этот код печатает каждый символ, включая пробелы и знаки пункции в переменной my_list, потому что длина равна 14. Теперь рассмотрим следующие фрагменты.

my_list[0:14:1]
my_list[0:14:]
my_list[:14]
my_list[:14:1]
my_list[:14:]
my_list[0:]
my_list[0::1]
my_list[0::]
my_list[::1]

Все они представляют собой один и тот же кусок !! Примите это как упражнение.

Копирование списка

Иногда нам нужно сделать копию списка и изменить ее, чтобы мы могли сохранить исходный список без изменений. Чтобы сделать копию всего списка, мы можем использовать срез, включающий весь список, указав [:]. Это говорит Python создать фрагмент, который начинается со значения по умолчанию start (0) и заканчивается значением по умолчанию end (length), создавая копию списка.

my_string = "Hello, Python!"
my_list = list(my_string)
my_list_copy = my_list[:]
print(my_list)
print(my_list_copy)

Этот код печатает два одинаковых списка, потому что второй является копией первого. Обратите внимание, что эти два списка разделены. Если вы измените один из них, это изменение не повлияет на другой.

my_string = "Hello, Python!"
my_list = list(my_string)
my_list_copy = my_list[:]
my_list_copy.append('!')  # Append one more character to the copy.
print(my_list)
print(my_list_copy)

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

my_string = "Hello, Python!"
my_list = list(my_string)
my_list2 = my_list           # This is a connection.
my_list_copy = my_list[:]    # This is a copy.