print( sum(B)/len(B) )
Особенности копирования списков в Python
Вы уже знаете, что в языке Python массив хранится как
структура данных типа «список» (list). Предположим, что в
программе создан массив (список) A, например, так:
A = [1, 2, 3]
При этом фактически в переменной A хранится ссылка на спи-сок, то есть адрес этого списка в памяти. Оператор присваива-ния
B = A
копирует в переменную B тот же самый адрес. Теперь две пере-менные, A и B, будут ссылаться на один и тот же список (Рис. 3.10, а).
93 http://kpolyakov.spb.ru
A
[0, 2, 3]
A[0]= 0
[1, 2, 3]
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
б)
а)
а)
B B
Рис. 3.10.
Поэтому при изменении списка A будет одновременно изме-няться и список B, ведь фактически это один и тот же список, к которому можно обращаться по двум разным именам. На Рис. 3.10, б, показана ситуация после выполнения оператора A[0]=0.
Эту особенность Python нужно учитывать при работе со списками. Если нам нужна именно копия списка (а не ещё одна ссылка на него), можно использовать срез, включающий все элементы:
B = A[:]
Теперь А и B – это независимые списки, и изменение одного из них не меняет второй (Рис. 3.11).
а)
а)
[1, 2, 3]
а)
а)
а)
[1, 2, 3]
Рис. 3.11.
Вместо среза можно было вызвать функцию copy из моду-ля copy:
import copy
A = [1, 2, 3]
B = copy.copy(A)
Это так называемая «поверхностная» копия – она не созда-ёт полную копию, если список содержит какие-то изменяемые объекты, например, другие списки. Для полного копирования используется функция deepcopy из того же модуля:
import copy
A = [1, 2, 3]
B = copy.deepcopy(A)
94 http://kpolyakov.spb.ru
[0, 2, 3]
[1, 2, 3]
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Поиск максимального элемента в массиве
Представьте себе, что вы по очереди заходите в N комнат, в каждой из которых лежит арбуз. Вес арбузов такой, что вы мо-жете унести только один арбуз. Возвращаться в ту комнату, где вы уже побывали, нельзя. Как выбрать самый большой арбуз?
Итак, вы вошли в первую комнату. По-видимому, нужно забрать лежащий в ней арбуз. Действительно, вдруг он самый большой? А вернуться сюда вы уже не сможете. С этим первым арбузом идёте во вторую комнату и сравниваете, какой арбуз больше – тот, который у вас в руках или новый. Если новый больше, берёте его, а старый оставляете во второй комнате. Те-перь в любом случае у вас в руках оказывается самый большой арбуз из первых двух комнат. Действуя так же и в остальных комнатах, вы гарантированно выберете самый большой арбуз из всех.
На этой идее основан и поиск максимального элемента в массиве. Для хранения максимального элемента выделим в памяти целочисленную переменную M. Будем в цикле просмат-ривать все элементы массива один за другим. Если очередной элемент массива больше, чем максимальный из предыдущих (находящийся в переменной M), запомним новое значение мак-
симального элемента в M.
Пусть требуется найти максимальное из значений элементов массива A, который имеет размер N. Чего не хватает в этом фрагменте программе:
for i in range(N):
if A[i] > M then
M = A[i] print( M )
Остается решить, каково должно быть начальное значение M.
Предположим, что в начале переменной M мы будем присваивать значение 0.
M = 0
95 http://kpolyakov.spb.ru![](data:image/jpeg;base64,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)
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Всегда ли это будет правильно?
Во-первых, можно записать в переменную M значение, за-ведомо меньшее, чем значение любого из элементов массива. Например, если в массиве записаны натуральные числа, можно записать в M ноль.
Если же содержимое массива неизвестно, можно сразу за-писать в M значение A[0] (сразу взять первый арбуз), а цикл пе-ребора начать со второго по счёту элемента, A[1]:
M = A[0]
for i in range(1,N):
if A[i] > M:
Достарыңызбен бөлісу: |