Алгоритмы обработки массивов. Программирование на Python

Содержание

Слайд 2

Поиск в массиве

Найти элемент, равный X:

i = 0
while A[i] != X:
i

Поиск в массиве Найти элемент, равный X: i = 0 while A[i]
+= 1
print ( "A[", i, "]=", X, sep = "" )

i = 0
while i < N and A[i] != X:
i += 1
if i < N:
print ( "A[", i, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

i < N

Слайд 3

Поиск в массиве

nX = -1
for i in range ( N ):
if

Поиск в массиве nX = -1 for i in range ( N
A[i] == X:
nX = i
break
if nX >= 0:
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

Вариант с досрочным выходом:

break

досрочный выход из цикла

номер найденного элемента

Слайд 4

for i in range ( N ):
if A[i] == X:
print

for i in range ( N ): if A[i] == X: print
( "A[", i, "]=", X, sep = "" )
break
else:
print ( "Не нашли!" )

Поиск в массиве

Варианты в стиле Python:

if X in A:
nX = A.index(X)
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

Слайд 5

Задачи

«A»: Заполните массив случайными числами в интервале [0,5]. Введите число X и

Задачи «A»: Заполните массив случайными числами в интервале [0,5]. Введите число X
найдите все значения, равные X.
Пример:
Массив:
1 2 3 1 2
Что ищем:
2
Нашли: A[2]=2, A[5]=2
Пример:
Массив:
1 2 3 1 2
Что ищем:
6
Ничего не нашли.

Слайд 6

Задачи

«B»: Заполните массив случайными числами в интервале [0,5]. Определить, есть ли в

Задачи «B»: Заполните массив случайными числами в интервале [0,5]. Определить, есть ли
нем элементы с одинаковыми значениями, стоящие рядом.
Пример:
Массив:
1 2 3 3 2 1
Есть: 3
Пример:
Массив:
1 2 3 4 2 1
Нет

Слайд 7

Задачи

«C»: Заполните массив случайными числами. Определить, есть ли в нем элементы с

Задачи «C»: Заполните массив случайными числами. Определить, есть ли в нем элементы
одинаковыми значениями, не обязательно стоящие рядом.
Пример:
Массив:
3 2 1 3 2 5
Есть: 3, 2
Пример:
Массив:
3 2 1 4 0 5
Нет

Слайд 8

Максимальный элемент

M = A[0]
for i in range(1,N):
if A[i] > M:

Максимальный элемент M = A[0] for i in range(1,N): if A[i] >
M = A[i]
print ( M )

M = A[0]
for x in A:
if x > M:
M = x

Варианты в стиле Python:

M = max ( A )

Слайд 9

Максимальный элемент и его номер

Максимальный элемент и его номер

Слайд 10

Максимальный элемент и его номер

M = max(A)
nMax = A.index(M)
print ( "A[", nMax,

Максимальный элемент и его номер M = max(A) nMax = A.index(M) print
"]=", M, sep = "" )

Вариант в стиле Python:

Слайд 11

Задачи

«A»: Заполнить массив случайными числами и найти минимальный и максимальный элементы массива

Задачи «A»: Заполнить массив случайными числами и найти минимальный и максимальный элементы
и их номера.
Пример:
Массив:
1 2 3 4 5
Минимальный элемент: A[1]=1
Максимальный элемент: A[5]=5

«B»: Заполнить массив случайными числами и найти два максимальных элемента массива и их номера.
Пример:
Массив:
5 5 3 4 1
Максимальный элемент: A[1]=5
Второй максимум: A[2]=5

Слайд 12

Задачи

«C»: Введите массив с клавиатуры и найдите (за один проход) количество элементов,

Задачи «C»: Введите массив с клавиатуры и найдите (за один проход) количество
имеющих максимальное значение.
Пример:
Массив:
3 4 5 5 3 4 5
Максимальное значение 5
Количество элементов 3

Слайд 13

Реверс массива

«Простое» решение:

for i in range( N ):
поменять местами A[i] и

Реверс массива «Простое» решение: for i in range( N ): поменять местами
A[N-1-i]

N//2

остановиться на середине!

Слайд 14

Реверс массива

for i in range(N//2):
c = A[i]
A[i] = A[N-1-i]
A[N-1-i]

Реверс массива for i in range(N//2): c = A[i] A[i] = A[N-1-i]
= c

Варианты в стиле Python:

for i in range(N//2):
A[i], A[N-i-1]= A[N-i-1], A[i]

A.reverse()

Слайд 15

Циклический сдвиг элементов

«Простое» решение:

c = A[0]
for i in range(N-1):
A[i] = A[i+1]
A[N-1]

Циклический сдвиг элементов «Простое» решение: c = A[0] for i in range(N-1):
= c

Слайд 16

Срезы в Python

A[1:3]

[12, 5]

A[2:3]

[5]

Срезы в Python A[1:3] [12, 5] A[2:3] [5] A[:3] [7, 12, 5]
A[:3]

[7, 12, 5]

A[0:3]

с начала

A[3:N-2]

[8,…,18,34]

A[3:]

[8,…,18,34,40,23]

A[3:N]

до конца

A[:]

[7,12,5,8,…,18,34,40,23]

копия массива

Слайд 17

Срезы в Python – шаг

A[1:6:2]

[12, 8, 18]

Срезы в Python – шаг A[1:6:2] [12, 8, 18] A[::3] [7, 8,
A[::3]

[7, 8, 34]

A[8:2:-2]

[23, 34, 76]

A[::-1]

[23,40,34,18,76,8,5,12,7]

реверс!

A.reverse()

шаг

Слайд 18

Задачи

«A»: Заполнить массив случайными числами и выполнить циклический сдвиг элементов массива вправо

Задачи «A»: Заполнить массив случайными числами и выполнить циклический сдвиг элементов массива
на 1 элемент.
Пример:
Массив:
1 2 3 4 5 6
Результат:
6 1 2 3 4 5

«B»: Массив имеет четное число элементов. Заполнить массив случайными числами и выполнить реверс отдельно в первой половине и второй половине.
Пример:
Массив:
1 2 3 4 5 6
Результат:
3 2 1 6 5 4

Слайд 19

Задачи

«C»: Заполнить массив случайными числами в интервале [-100,100] и переставить элементы так,

Задачи «C»: Заполнить массив случайными числами в интервале [-100,100] и переставить элементы
чтобы все положительные элементы стояли в начала массива, а все отрицательные и нули – в конце. Вычислите количество положительных элементов.
Пример:
Массив:
20 -90 15 -34 10 0
Результат:
20 15 10 -90 -34 0
Количество положительных элементов: 3

Слайд 20

Отбор нужных элементов

Простое решение:

Задача. Отобрать элементы массива A, удовлетворяющие некоторому условию, в

Отбор нужных элементов Простое решение: Задача. Отобрать элементы массива A, удовлетворяющие некоторому
массив B.

B = []
сделать для i от 0 до N-1
если условие выполняется для A[i] то
добавить A[i] к массиву B

B = []
for x in A:
if x % 2 == 0:
B.append(x)

добавить x в конец массива B

Слайд 21

Отбор нужных элементов

Решение в стиле Python:

Задача. Отобрать элементы массива A, удовлетворяющие некоторому

Отбор нужных элементов Решение в стиле Python: Задача. Отобрать элементы массива A,
условию, в массив B.

B = [ x for x in A ] 
if x % 2 == 0  ]

если x – чётное число

перебрать все элементы A

Слайд 22

Особенности работы со списками

A = [1, 2, 3]
B = A

[1, 2, 3]

A

B

A[0]

Особенности работы со списками A = [1, 2, 3] B = A
= 0

A = [1, 2, 3]
B = A[:]

копия массива A

[1, 2, 3]

A

[1, 2, 3]

B

A[0] = 0

Слайд 23

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

«Поверхностное» копирование:

import copy
A = [1, 2, 3]
B = copy.copy(A)

A = [1,

Копирование списков «Поверхностное» копирование: import copy A = [1, 2, 3] B
2, 3]
B = [4, 5, 6]
C = [A, B]
D = copy.copy(C)
C[0][0] = 0

0

«Глубокое» копирование:

D = copy.deepcopy(C)

Слайд 24

Задачи

«A»: Заполнить массив случайными числами в интервале [-10,10] и отобрать в другой

Задачи «A»: Заполнить массив случайными числами в интервале [-10,10] и отобрать в
массив все чётные отрицательные числа.
Пример:
Массив А:
-5 6 7 -4 -6 8 -8
Массив B:
-4 -6 -8

«B»: Заполнить массив случайными числами в интервале [0,100] и отобрать в другой массив все простые числа. Используйте логическую функцию, которая определяет, является ли переданное ей число простым.
Пример:
Массив А:
12 13 85 96 47
Массив B:
13 47