На этом шаге мы рассмотрим различные варианты перебора списка.
Перебрать все элементы списка можно с помощью цикла for:
>>> arr = [1, 2, 3, 4, 5] >>> for i in arr: print (i, end=" ") 1 2 3 4 5
Следует заметить, что переменную i внутри цикла можно изменить, но если она ссылается на неизменяемый тип данных (например, число или строку), то это не отразится на исходном списке:
>>> arr = [1, 2, 3, 4] # Элементы имеют неизменяемый тип (число) >>> for i in arr: i += 10 >>> arr # Список не изменился [1, 2, 3, 4] >>> arr = [ [1, 2], [3, 4] ] # Элементы имеют изменяемый тип (список) >>> for i in arr: i[0] += 10 >>> arr # Список изменился [[11, 2], [13, 4]]
Чтобы получить доступ к каждому элементу, можно, например, для генерации индексов воспользоваться функцией range (). Функция возвращает объект-диапазон, поддерживающий итерации, а с помощью диапазона внутри цикла for можно получить текущий индекс. Функция range () имеет следующий формат:
range([<Начало>, ]<Конец>[, <Шаг>])
Первый параметр задает начальное значение. Если параметр <Начало> не указан, то по умолчанию используется значение 0. Во втором параметре указывается конечное значение. Следует заметить, что это значение не входит в возвращаемый диапазон значений. Если параметр <Шаг> не указан, то используется значение 1. Для примера умножим каждый элемент списка на 2:
arr = [1, 2, 3, 4] for i in range(len(arr)): arr[i] *= 2 print(arr) # Результат выполнения: [2, 4, 6, 8]
Можно также воспользоваться функцией enumerate (<Объект> [, start=0]), которая на каждой итерации цикла for возвращает кортеж из индекса и значения текущего элемента списка. Умножим каждый элемент списка на 2:
arr = [1, 2, 3, 4] for i, elem in enumerate(arr): arr[i] = elem * 2 print(arr) # Результат выполнения: [2, 4, 6, 8]
Кроме того, перебрать элементы можно с помощью цикла while. Но в этом случае следует помнить, что цикл while работает медленнее цикла for. Для примера умножим каждый элемент списка на 2, используя цикл while:
arr = [1, 2, 3, 4] i, с = 0, len(arr) while i < с: arr[i] *= 2 i += 1 print (arr) # Результат выполнения: [2, 4, 6, 8]
На следующем шаге мы рассмотрим генераторы списков и выражения-генераторы.