Thon Условные



бет34/38
Дата23.02.2020
өлшемі2,05 Mb.
#58878
1   ...   30   31   32   33   34   35   36   37   38
Байланысты:
8-3 python


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

05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин



Всегда ли это будет правильно?

Во-первых, можно записать в переменную M значение, за-ведомо меньшее, чем значение любого из элементов массива. Например, если в массиве записаны натуральные числа, можно записать в M ноль.



Если же содержимое массива неизвестно, можно сразу за-писать в M значение A[0] (сразу взять первый арбуз), а цикл пе-ребора начать со второго по счёту элемента, A[1]:

M = A[0]

for i in range(1,N):

if A[i] > M:


Достарыңызбен бөлісу:
1   ...   30   31   32   33   34   35   36   37   38




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет