1.45M
Категория: ПрограммированиеПрограммирование

Программирование на языке Python. Структуры и последовательности данных

1.

1
Программирование
на языке Python
Лекции 4-5. Структуры и
последовательности данных
Заманова С.К.

2.

Программирование
на языке Python
Списки

3.

Список
Список (list) - это структура данных,
предназначенная для хранения объектов
различных типов.
Размер списка не статистический, его можно
изменить.
Список относится к изменяемому типу данных.
Переменная, определяемая как список,
ссылается на структуру в памяти, то есть, в свою
очередь, сохраняет ссылку на какой-либо другой
объект или структуру.
3

4.

Списки

5.

Изменение списков

6.

Доступ к элементам списка

7.

Операции со списками

8.

Операции со списками
A = [1, 3, 4, 23, 5]
A = [1, 3] + [4, 23] + [5]
[1, 3, 4, 23, 5]
A = [0]*10
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
A = list ( range(10) )
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

9.

Методы списков
Метод
Что делает
list.append(x)
Добавляет элемент в конец списка
list.extend(L)
Расширяет список list, добавляя в конец все элементы
списка L
list.insert(i, x)
Вставляет на i-ый элемент значение x
list.remove(x)
Удаляет первый элемент в списке, имеющий значение x.
ValueError, если такого элемента не существует
list.pop([i])
Удаляет i-ый элемент и возвращает его. Если индекс не
указан, удаляется последний элемент
list.index(x, [start [,
end]])
Возвращает положение первого элемента со значением
x (при этом поиск ведется от start до end)
list.count(x)
Возвращает количество элементов со значением x
list.sort()
Сортирует список
list.reverse()
list.clear()
Разворачивает список
Очищает список

10.

Добавление элементов в список
вставка
элемента

11.

Удаление элемента из списка
Удаление
элемента

12.

Поиск элемента в списке
Поиск индекса
элемента

13.

Сортировка списка

14.

Список в обратном порядке

15.

Присвоение списков

16.

Генераторы списков
A =[ i for i in range(10) ]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
A =[ i*i for i in range(10) ]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
from random import randint
A = [ randint(20,100) for x in range(10)]
A = [ i*i for i in range(10) if i%2==0
[0, 2, 4, 6, 8]
A = list ( range(10) )
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
условие
отбора

17.

Двумерные списки

18.

18
Кортежи
Кортеж (tuple) - неизменяемая структура данных. Кортеж
занимает меньше места в памяти, чем список.
Список:
a = [1, 2, 3]
print(a)
Результат: [1, 2, 3]
a[1] = 15
print(a)
Результат: [1, 15, 3]
Кортеж: b = (1, 2, 3)
print(b)
Результат: (1, 2, 3)
b[1] = 15
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
Элементы кортежа нельзя менять!!!

19.

19
Кортежи
Создание пустого кортежа:
a = ()
print(type(a))
Результат: <class 'tuple'>
b = tuple()
print(type(b))
Результат: <class 'tuple'>
Создание кортежей:
a = (1, 2, 3, 4, 5)
print(type(a))
'tuple'>
print(a)
5)
Результат: <class
Результат: (1, 2, 3, 4,
Можно создать, используя функцию tuple():
a = tuple((1, 2, 3, 4))
print(a)
(1, 2, 3, 4)

20.

20
Доступ к элементу кортежа
Мы также обращаемся к каждому элементу кортежа
через индекс. Но элемент кортежа изменить нельзя!!!
a = (1, 2, 3, 4, 5)
print(a[0])
Результат: 1
a[1] = 3
#элемент не может быть изменен
Traceback (most recent call last):
a[1] = 3
File "<pyshell#24>", line 1, in <module> TypeError:
'tuple' object does not support item assignment

21.

21
Удаление кортежа
Мы не можем удалить элемент каждого кортежа
отдельно.
a = (1, 2, 3, 4, 5)
del a[0]
Traceback (most recent call last):
del a[0]
File "<pyshell#26>", line 1, in <module> TypeError: 'tuple'
object doesn't support item deletion
Необходимо полностью удалить кортеж
del a

22.

22
Преобразование кортежа в список и наоборот
Достаточно дать список в качестве аргумента функции
tuple(), чтобы преобразовать его в кортеж.
lst = [1, 2, 3, 4, 5]
print(type(lst))
Результат: <class 'list'>
print(lst)
Результат: [1, 2, 3, 4, 5]
tpl = tuple(lst)
print(type(tpl))
Результат: <class 'tuple'>
print(tpl)
Результат: (1, 2, 3, 4, 5)

23.

23
Словари
Словарь (dict) - изменяемая, хаотичная структура
данных для хранения любых объектов по ключу. В
словаре данные хранятся в формате "ключ - значение".
Пример:
animal = {’cat’: ’кошка’, ’dog’: ’пёс’, ’bird’: ’птица’,
’mouse ’: ’мышь’}
print(animal)
Результат:
{’mouse’: ’мышь’, ’cat’: ’кошка’, ’dog’: ’пёс’, ’bird’: ’птица’}

24.

24
Создание, изменение, удаление словарей и их использование
Создание словаря
dict() или { } - создание пустого словаря:
>>> d1 = dict()
>>> print(type(d1))
Результат: <class 'dict'>
>>> d2 = {}
>>> print(type(d2)) Результат: <class 'dict'>

25.

25
Работа со словарем
Составим словарь по набору данных, запишем
группу ключ-значение цепочкой:
>>> d1 = dict(Ivan="manager", Mark="worker")
>>> print(d1)
Результат: {'Mark': 'worker', 'Ivan': 'manager'}
>>> d2 = {"A1":"123", "A2":"456"}
>>> print(d2)
Результат: {'A2': '456', 'A1': '123'}

26.

26
Методы словарей
clear() – удаляет все элементы из словаря.
>>> d2 = {"A1":"123", "A2":"456"}
>>> print(d2)
Результат:
{'A2': '456', 'A1': '123'}
>>> d2.clear()
>>> print(d2)
Результат: {}

27.

27
Методы словарей
copy() – возвращает копию словаря.
>>> d2 = {"A1":"123", "A2":"456"}
>>> d3 = d2.copy()
>>> print(d3)
Результат: {'A1': '123', 'A2': '456'}
>>> d3["A1"]="789"
>>> print(d2)
Результат: {'A2': '456', 'A1': '123'}
>>> print(d3)
Результат: {'A1': '789', 'A2': '456'}

28.

28
Методы словарей
fromkeys(seq[, value]) - создает новый словарь
из значения value с ключом seq.
get(key) - возвращает значение из словаря по
ключу key:
>>> d = {"A1":"123", "A2":"456"}
>>> d.get("A1")
Результат: “123”

29.

29
Методы словарей
items() – возвращает элементы словаря (ключ,
значение ) в отформатированном виде.
>>> d = {"A1":"123", "A2":"456"}
>>> d.items()
Результат: dict_items([('A2', '456'), ('A1', '123')])
keys() – возвращает ключ словаря.
>>> d = {"A1":"123", "A2":"456"}
>>> d.keys()
Результат: dict_keys(['A2', 'A1'])

30.

30
Методы словарей
popitem() – удаляет и возвращает пару из
словаря (ключ,значение). Если словарь пуст,
вызывается предупреждение KeyError.
>>> d = {"A1":"123", "A2":"456"}
>>> d.popitem()
Результат: ('A2', '456')
>>> print(d)
Результат: {'A1': '123'}
values() – возвращает значение элементов
словаря.
>>> d = {"A1":"123", "A2":"456"}
>>> d.values()
Результат: dict_values(['456', '123'])

31.

31
Множество
Множество представляет собой контейнер, состоящий
из элементов, расположенных в произвольном порядке.
Соединение элементов множества -/, пересечение -&,
симметричная разность -^.
>>> a = set()
>>> a
Результат: set()
>>> a = set('hello')
>>> a
Результат: {'h', 'o', 'l', 'e'}
>>> x.add(6)
>>>x
Результат: {1, 2, 3, 5, 6}
>>> x.remove(5)
>>> x
Результат: {1, 2, 3, 6}
>>> x = set([1, 2, 3, 1, 3, 5])
>>> z = frozenset(x)
>>> z
Результат: frozenset({1, 2, 3, 5})

32.

32
Повторяющиеся элементы в множестве
Множества в Python — это неупорядоченные коллекции
уникальных элементов. Если вы попытаетесь создать
набор с дубликатами элементов, дубликаты будут
автоматически удалены:
a = {1, 2, 2, 3, 3, 4, 5, 5}
print (a)
Результат: {1, 2, 3, 4, 5}
Множества могут содержать элементы различных типов
данных, включая числа, строки и даже другие наборы (при
условии, что они неизменяемы):
b = {1, 'hello', (1, 2, 3)}
print (b)
Результат: {1, 'hello', (1, 2, 3)}

33.

33
Методы множеств
Добавление элементов в множество
my_set = {1, 2, 3, 3}
my_set.add(4)
print (my_set)
Результат:
{1, 2, 3, 4}

34.

34
Методы множеств
Удаление элементов в множества
my_set = {1, 2, 3, 4}
my_set.remove(3)
print (my_set)
Результат:
# Если элемент отсутствует, возникает KeyError
{1, 2, 4} #
В качестве альтернативы вы можете использовать функцию discard()
для удаления элемента из набора, если он присутствует. В отличие от
remove(), discard() не вызывает ошибку, если элемент не найден в
наборе
my_set = {1, 2, 3, 4}
my_set.discard(5)
print (my_set)
Результат:
# discard() не вызывает ошибку, если элемент не найден
{1, 2, 4}

35.

35
Методы множеств
Тестирование членства в множестве
Множества предоставляют эффективный способ проверки
наличия элемента в множестве. Вы можете
использовать ключевое слово in для выполнения этой
проверки, которое возвращает True, если элемент
присутствует, и False в противном случае
my_set = {1, 2, 3, 4}
if 2 in my_set:
print("2 is present in the set")
else:
print("2 is not present in the set")
Результат:
2 is present in the set

36.

36
Операции с множествами
• В Python множества поддерживают различные операции
с множествами, которые используются для
манипулирования и сравнения множеств.
• К ним относятся объединение, пересечение, разность,
симметричная разность и проверка подмножеств.
Объединение — объединяет элементы из обоих множеств
с помощью функции union() или оператора “|” .
Пересечение — используется для получения общих элементов с помощью функции intersection() или оператора &.
Разность — используется для получения элементов,
которые есть в одном наборе, но не есть в другом, с
помощью функции difference() или оператора “-” .
Симметричная разность — используется для получения
элементов, которые находятся в одном из множеств, но не
входят в оба, с помощью метода symmetric_difference() или
оператора “^”.

37.

37
Объединение множеств
Объединение множеств означает слияние двух или более
наборов в один. При этом вы объединяете элементы
нескольких множеств, гарантируя при этом удаление
дублирующих элементов, поскольку множества не допускают
дублирующих элементов.
1.
s1={1,2,3,4,5}
s2={4,5,6,7,8}
s3 = s1 | s2
print (s3)
Результат: {1, 2, 3, 4, 5, 6, 7, 8}
2.
s1={1,2,3,4,5}
s2={4,5,6,7,8}
s3 = s1.union(s2)
print (s3)
Результат: {1, 2, 3, 4, 5, 6, 7, 8}
оператор «|»
выполняет ту же операцию,
что и оператор |

38.

38
Объединение множеств
3.
s1={1,2,3,4,5}
s2={4,5,6,7,8}
s1.update(s2)
print (s1)
Результат: {1, 2, 3, 4, 5, 6, 7, 8}
4.
s1={1,2,3,4,5}
s2={4,5,6,7,8}
s3 = {*s1, *s2}
print (s3)
Результат: {1, 2, 3, 4, 5, 6, 7, 8}
5.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
выполняет ту же операцию,
что и union(), но не
возвращает новый объект
оператор распаковки *,
распаковка элементов
множеств в новое
в цикле по нескольким
наборам добавляем их
элементы в новое
множество
joined_set = {x for s in [set1, set2] for x in s}
print(joined_set)
Результат: {1, 2, 3, 4, 5}

39.

39
Объединение множеств
6.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
joined_set = set()
# инициализация пустого множества
for element in set1: # цикл по set1 и добавление в joined set
joined_set.add(element)
for element in set2: # цикл по set2 и добавление в joined set
joined_set.add(element)
print(joined_set)
Результат: {1, 2, 3, 4, 5}

40.

40
Операторы множеств- объединение
• Объединение двух множеств — это множество,
содержащее все различные элементы, которые находятся
в A или в B, или в обоих. Например, {1,2}∪{2,3}={1,2,3}.
• В примере используется оператор «|» и функция union(), а
также возвращается объединение двух множеств:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = {6, 8, 9}
set4 = {9, 45, 73}
union_set1 = set1.union(set2)
union_set2 = set3 | set4
print ('The union of set1 and set2 is', union_set1)
print ('The union of set3 and set4 is', union_set2)
Результат:
The union of set1 and set2 is {1, 2, 3, 4, 5}
The union of set3 and set4 is {73, 6, 8, 9, 45}

41.

41
Операторы множеств- пересечение
• Пересечение двух множеств AA и BB, обозначаемое A∩B,
состоит из всех элементов, которые являются общими для
обоих множеств в A и B. Например, {1,2}∩{2,3}={2}.
В примере используется оператор & и функция intersection
(), а также возвращается пересечение двух множеств:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = {6, 8, 9}
set4 = {9, 8, 73}
intersection_set1 = set1.intersection(set2)
intersection_set2 = set3 & set4
print ('The intersection of set1 and set2 is', intersection_set1)
print ('The intersection of set3 and set4 is', intersection_set2)
Результат:
The intersection of set1 and set2 is {3}
The intersection of set3 and set4 is {8, 9}

42.

42
Операторы множеств - разность
Разность A−B между двумя множествами A и B состоит из
элементов, которые присутствуют в A, но не присутствуют в
B. Например, If A={1,2,3} and B={3,5}, then A−B={1,2}. В примере используется оператор «-» и функция difference() и
возвращается разность двух множеств:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = {6, 8, 9}
set4 = {9, 8, 73}
difference_set1 = set1.difference(set2)
difference_set2 = set3 - set4
print ('The difference between set1 and set2 is', difference_set1)
print ('The difference between set3 and set4 is', difference_set2)
Результат:
The difference between set1 and set2 is {1, 2}
The difference between set3 and set4 is {6}

43.

43
Операторы множеств- симметричная разность
Симметричная разность двух множеств A и B обозначаемая как "A Δ B«
и состоит из элементов, которые присутствуют в любом из множеств, но
не присутствуют в обоих множествах. A Δ B = (A − B) ⋃ (B − A). Например,
если A = {1, 2, 3, 4, 5, 6, 7, 8} и B = {1, 3, 5, 6, 7, 8, 9}, то A Δ B = {2, 4, 9}. В
примере используется оператор «^» и функция symmetric_difference () и
возвращается симметричная разность двух множеств:
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = {6, 8, 9}
set4 = {9, 8, 73}
symmetric_difference_set1 = set1.symmetric_difference(set2)
symmetric_difference_set2 = set3 ^ set4
print ('The symmetric difference of set1 and set2 is',
symmetric_difference_set1)
print ('The symmetric difference of set3 and set4 is',
symmetric_difference_set2)
Результат:
The symmetric difference of set1 and set2 is {1, 2, 4, 5}
The symmetric difference of set3 and set4 is {73, 6}

44.

44
Упражнения по множествам
1. Для поиска общих элементов в двух списках с помощью операций над
множествами:
1=[1,2,3,4,5]
l2=[4,5,6,7,8]
s1=set(l1)
s2=set(l2)
commons = s1&s2 # or s1.intersection(s2)
commonlist = list(commons)
print (commonlist)
Результат: [4, 5]
2. Для проверки того, является ли множество подмножеством другого:
s1={1,2,3,4,5}
s2={4,5}
if s2.issubset(s1):
print ("s2 is a subset of s1")
else:
print ("s2 is not a subset of s1")
Результат: s2 is a subset of s1

45.

45
Программирование
на языке Python
Лекция 5. Массивы

46.

46
Что такое массив?
Массив – это группа переменных одного типа,
расположенных в памяти рядом (в соседних ячейках) и
имеющих общее имя. Каждая ячейка в массиве имеет
уникальный номер (индекс).
Надо:
• выделять память
• записывать данные в нужную ячейку
• читать данные из ячейки

47.

47
Что такое массив?
! Массив = таблица!
A
массив
0
1
5
10
A[0]
A[1]
НОМЕР
элемента массива
(ИНДЕКС)
22
15
15
3
4
20
25
ЗНАЧЕНИЕ
A[2]
A[3]
A[4]
элемента массива
НОМЕР (ИНДЕКС)
элемента массива: 2
A[2]
ЗНАЧЕНИЕ
элемента массива: 15

48.

48
Массивы в Python: списки
A = [1, 3, 4, 23, 5]
A = [1, 3] + [4, 23] + [5]
[1, 3, 4, 23, 5]
A = [0]*10
? Что будет?
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
A = list ( range(10) )
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

49.

Как обработать все элементы массива?
Создание массива:
N=5
A = [0]*N
Обработка:
# обработать A[0]
# обработать A[1]
# обработать A[2]
# обработать A[3]
# обработать A[4]
? 1) если N велико (1000, 1000000)?
2) при изменении N программа не должна меняться!
49

50.

Как обработать все элементы массива?
Обработка с переменной:
Обработка в цикле:
i = 0;
# обработать A[i]
i += 1
# обработать A[i]
i += 1
# обработать A[i]
i += 1
# обработать A[i]
i += 1
# обработать A[i]
i=0
while i < N:
# обработать A[i]
i += 1
i += 1
Цикл с переменной:
for i in range(N):
# обработать A[i]
50

51.

51
Ввод массива с клавиатуры
Создание массива:
N = 10
A = [0]*N
Ввод с клавиатуры:
for i in range(N):
print ( "A[", i, "]=",
sep = "", end = "" )
A[i] = int( input() )
sep = ""
end = ""
не разделять
элементы
не переходить на
новую строку
A[0] = 5
A[1] = 12
A[2] = 34
A[3] = 56
A[4] = 13

52.

52
Ввод массива с клавиатуры
Ввод без подсказок:
A = [ int(input()) for i in range(N) ]
Ввод с подсказками:
A = [int(input("A["+str(i)+"]=")) for i in range(N)]
Ввод в одной строке: (для Python 3)
data = input()
# "1 2 3 4 5"
s = data.split() # ["1","2","3","4","5"]
A = [ int(x) for x in s ]
# [1,2,3,4,5]

53.

53
Вывод массива на экран
Как список:
print ( A )
[1, 2, 3, 4, 5]
В строчку через пробел:
записать как строку
s = [ str(x) for x in A]
1 2 3 4 5
print ( " ".join( s ) )
соединить через пробел
Для Python 3:
1 2 3 4 5
for i in range(N):
print ( A[i], end = " " )
или так:
for x in A:
print ( x, end = " " )

54.

Заполнение случайными числами
from random import randint
N = 10
A = [0]*N
for i in range(N):
A[i] = randint(20,100)
или так:
from random import randint
N = 10
A = [ randint(20,100)
for x in range(N)]
случайные
числа
[20,100]
54

55.

Перебор элементов
Общая схема (можно изменять A[i]):
for i in range(N):
... # сделать что-то с A[i]
for i in range(N):
A[i] += 1
Если не нужно изменять A[i]:
for x in A:
... # сделать что-то с x
x = A[0], A[1], ..., A[N-1]
for x in A:
print ( x )
55

56.

Алгоритмизация и программирование, язык Python, 10 класс
56
Подсчёт нужных элементов
Задача. В массиве записаны данные о росте
баскетболистов. Сколько из них имеет рост больше
180 см, но меньше 190 см?
? Как решать?
Python:
180 < x < 190
count = 0
for x in A:
if 180 < x and x < 190:
count += 1
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

57.

Алгоритмизация и программирование, язык Python, 10 класс
57
Перебор элементов
Сумма:
summa = 0
for x in A:
if 180 < x < 190:
summa += x
print ( summa )
или так:
print ( sum(A) )
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

58.

Алгоритмизация и программирование, язык Python, 10 класс
58
Перебор элементов
Среднее арифметическое:
count = 0
summa = 0
for x in A:
if 180 < x < 190:
count += 1
summa += x
print ( summa/count )
среднее
арифметическое
или так:
отбираем нужные
B = [ x for x in A ]
if 180 < x < 190]
print ( sum(B)/len(B) )
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

59.

59
Задачи
«A»: Заполните массив случайными числами в интервале
[0,100] и найдите среднее арифметическое его значений.
Пример:
Массив:
1 2 3 4 5
Среднее арифметическое 3.000
«B»: Заполните массив случайными числами в интервале
[0,100] и подсчитайте отдельно среднее значение всех
элементов, которые <50, и среднее значение всех
элементов, которые ≥50.
Пример:
Массив:
3 2 52 4 60
Ср. арифм. элементов [0,50): 3.000
Ср. арифм. элементов [50,100]: 56.000

60.

60
Задачи
«C»: Заполните массив из N элементов случайными числами
в интервале [1,N] так, чтобы в массив обязательно вошли
все числа от 1 до N (постройте случайную перестановку).
Пример:
Массив:
3 2 1 4 5

61.

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

62.

Алгоритмизация и программирование, язык Python, 10 класс
62
Поиск в массиве
Найти элемент, равный X:
i=0
while A[i] != X:
Что плохо?
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 ( "Не нашли!" )
?
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

63.

63
Поиск в массиве
Вариант с досрочным выходом:
номер найденного
элемента
X-искомый элемент
N – количество
элементов массива
nX = -1
for i in range ( N ):
if A[i] == X:
nX = i
досрочный
break
выход из цикла
if nX >= 0:
print ( "A[", nX, "]=", X, sep = "" )
else:
print ( "Не нашли!" )

64.

64
Поиск в массиве
Варианты в стиле Python:
for i in range ( N ):
if A[i] == X:
print ( "A[", i, "]=", X)
break
else:
print ( "Не нашли!" )
если не было досрочного выхода из цикла
if X in A:
nX = A.index(X)
print ( "A[", nX, "]=", X)
else:
print ( "Не нашли!" )

65.

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

66.

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

67.

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

68.

68
Максимальный элемент
M = A[0]
for i in range(1,N):
if A[i] > M:
Если range(N)?
M = A[i]
print ( M )
?
Варианты в стиле Python:
M = A[0]
for x in A:
if x > M:
M=x
M = max ( A )
? Как найти его номер?

69.

69
Максимальный элемент и его номер
M = A[0]; nMax = 0
for i in range(1,N):
if A[i] > M:
Что можно улучшить?
M = A[i]
nMax = ii
print ( "A[", nMax, "]=", M, sep = "" )
?
! По номеру элемента можно найти значение!
nMax = 0
for i in range(1,N):
if A[i] > A[nMax]
A[nMax]:
nMax = i
print ( "A[", nMax, "]=", A[nMax]
A[nMax], sep = "" )

70.

70
Максимальный элемент и его номер
Вариант в стиле Python:
M = max(A)
nMax = A.index(M)
print ( "A[", nMax, "]=", M, sep = "" )
номер заданного
элемента (первого из…)

71.

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

72.

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

73.

73
Реверс массива
0
1
2
3
N-4
N-3
N-2
N-1
7
12
5
8
18
34
40
23
0
1
2
3
N-4
N-3
N-2
N-1
23
40
34
18
8
5
12
7
«Простое» решение:
остановиться на середине!
for i in range( N//2
N ):
поменять местами A[i] и A[N-1-i]
? Что плохо?

74.

74
Реверс массива
for i in range(N//2):
c = A[i]
A[i] = A[N-1-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()

75.

Алгоритмизация и программирование, язык Python, 10 класс
75
Циклический сдвиг элементов
0
1
2
3
N-4
N-3
N-2
N-1
7
12
5
8
18
34
40
23
0
1
2
3
N-4
N-3
N-2
N-1
12
5
8
15
34
40
23
7
«Простое» решение:
? Почему не до N?
? Что плохо?
c = A[0]
for i in range(N-1):
A[i] = A[i+1]
A[N-1] = c
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

76.

76
Срезы в Python
0
разрезы
0
1
2
3
N-4
N-3
N-2
N-1
7
12
5
8
18
34
40
23
1
A[1:3]
A[2:3]
A[:3]
2
3
N-4
N-3
N-2
N-1
N
[12, 5]
[5]
A[0:3]
[7, 12, 5]
с начала
A[3:N-2]
A[3:]
[8,…,18,34]
A[3:N]
до конца
A[:]
[8,…,18,34,40,23]
копия массива
[7,12,5,8,…,18,34,40,23]

77.

77
Срезы в Python – отрицательные индексы
разрезы
0
0
1
2
3
N-4
N-3
N-2
N-1
7
12
5
8
18
34
40
23
1
A[1:-1]
A[1:N-1]
A[-4:-2]
A[N-4:N-2]
2
3
N-4
N-3
N-2
[12,5,8,…,18,34,40]
[18, 34]
N-1
N

78.

78
Срезы в Python – шаг
разрезы
0
1
2
3
4
5
6
7
8
7
12
5
8
76
18
34
40
23
0
1
2
3
4
5
6
7
8
9
шаг
A[1:6:2]
A[::3]
A[8:2:-2]
A[::-1]
[12, 8, 18]
[7, 8, 34]
[23, 34, 76]
[23,40,34,18,76,8,5,12,7]
реверс!
A.reverse()

79.

79
Задачи
«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

80.

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

81.

81
Отбор нужных элементов
Задача. Отобрать элементы массива 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

82.

82
Отбор нужных элементов
Задача. Отобрать элементы массива A,
удовлетворяющие некоторому условию, в массив B.
Решение в стиле Python:
перебрать все
элементы A
B = [ x for x in A ]
if x % 2 == 0 ]
если x – чётное
число

83.

83
Задачи
«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

84.

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

85.

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

86.

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

87.

87
Программирование
на языке Python
Матрицы
К.Ю. Поляков, Е.А. Ерёмин, 2013
http://kpolyakov.spb.ru

88.

Алгоритмизация и программирование, язык Python, 10 класс
88
Что такое матрица?
нолик
нет знака
0
1
2
0
-1 0
1
крестик
1
-1 0
1
2
0
строка 1,
столбец 2
1 -1
? Как закодировать?
Матрица — это прямоугольная таблица, составленная
из элементов одного типа (чисел, строк и т.д.).
Каждый элемент матрицы имеет два индекса –
номера строки и столбца.
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

89.

Алгоритмизация и программирование, язык Python, 10 класс
89
Создание матриц
! Матрица – это список списков!
A = [[-1, 0, 1],
[-1, 0, 1],
[0, 1, -1]]
перенос на другую
строку внутри скобок
или так:
A = [[-1, 0, 1], [-1, 0, 1], [0, 1, -1]]
! Нумерация элементов с нуля!
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

90.

Алгоритмизация и программирование, язык Python, 10 класс
90
Создание матриц
Нулевая матрица:
N=3
M=2
row = [0]*M
A = [row]*N
A
0
row
0
0
1
1
2
A[0][0] = 1
а правильно так:
A = []
for i in range(N):
A.append ( [0]*M )
A
0
0
1
0
1
0
0
0
0
2
A[0][0] = 1
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

91.

Алгоритмизация и программирование, язык Python, 10 класс
91
Вывод матриц
print ( A )
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
def printMatrix ( A ):
for row in A:
for x in row:
print ( "{:4d}".format(x), end = "" )
print ()
1
4
7
2
5
8
3
6
9
К.Ю. Поляков, Е.А. Ерёмин, 2014
? Зачем форматный вывод?
http://kpolyakov.spb.ru

92.

Алгоритмизация и программирование, язык Python, 10 класс
92
Простые алгоритмы
Заполнение случайными числами:
import random
Вложенный цикл!
for i in range(N):
for j in range(M):
A[i][j] = random.randint ( 20, 80 )
print ( "{:4d}".format(A[i][j]),
end = "" )
print()
!
Суммирование:
s=0
for i in range(N):
for j in range(M):
s += A[i][j]
print ( s )
К.Ю. Поляков, Е.А. Ерёмин, 2014
s=0
for row in A:
s += sum(row)
print ( s )
http://kpolyakov.spb.ru

93.

Алгоритмизация и программирование, язык Python, 10 класс
93
Задачи
«A»: Напишите программу, которая заполняет квадратную
матрицу случайными числами в интервале [10,99], и
находит максимальный и минимальный элементы в
матрице и их индексы.
Пример:
Матрица А:
12 14 67 45
32 87 45 63
69 45 14 11
40 12 35 15
Максимальный элемент A[2,2]=87
Минимальный элемент A[3,4]=11
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

94.

Алгоритмизация и программирование, язык Python, 10 класс
94
Задачи
«B»: Яркости пикселей рисунка закодированы числами от 0 до 255 в
виде матрицы. Преобразовать рисунок в черно-белый по
следующему алгоритму:
1) вычислить среднюю яркость пикселей по всему рисунку
2) все пиксели, яркость которых меньше средней, сделать
черными (записать код 0), а остальные – белыми (код 255)
Пример:
Матрица А:
12 14 67 45
32 87 45 63
69 45 14 11
40 12 35 15
Средняя яркость 37.88
Результат:
0
0 255 255
0 255 255 255
255 255
0
0
255
0
0
0
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

95.

Алгоритмизация и программирование, язык Python, 10 класс
95
Задачи
«С»: Заполните матрицу, содержащую N строк и M столбцов,
натуральными числами по спирали и змейкой, как на рисунках:
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

96.

Алгоритмизация и программирование, язык Python, 10 класс
96
Перебор элементов матрицы
Главная диагональ:
for i in range(N):
# работаем с A[i][i]
Побочная диагональ:
for i in range(N):
# работаем с A[i][N-1-i]
Главная диагональ и под ней:
for i in range(N):
for j in range( i+1 ):
# работаем с A[i][j]
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

97.

Алгоритмизация и программирование, язык Python, 10 класс
97
Перестановка строк и столбцов
2-я и 4-я строки:
A[2], A[4] = A[4], A[2]
0
1
2
3
4
2-й и 4-й столбцы:
for i in range(N):
A[i][2], A[i][4] = A[i][4], A[i][2]
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

98.

Алгоритмизация и программирование, язык Python, 10 класс
98
Выделение строк и столбцов
1-я строка:
R = A[1][:]
R = A[i]
2-й столбец:
C = []
for row in A:
C.append(row[2])
или так:
C = [ row[2] for row in A ]
главная диагональ:
D = [ A[i][i] for i in range(N) ]
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

99.

Алгоритмизация и программирование, язык Python, 10 класс
99
Задачи
«A»: Напишите программу, которая заполняет квадратную
матрицу случайными числами в интервале [10,99], а затем
записывает нули во все элементы выше главной
диагонали. Алгоритм не должен изменяться при изменении
размеров матрицы.
Пример:
Матрица А:
12 14 67 45
32 87 45 63
69 45 14 30
40 12 35 65
Результат:
12 0 0 0
32 87 0 0
69 45 14 0
40 12 35 65
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru

100.

Алгоритмизация и программирование, язык Python, 10 класс
100
Задачи
«B»: Пиксели рисунка закодированы числами (обозначающими
цвет) в виде матрицы, содержащей N строк и M столбцов.
Выполните отражение рисунка сверху вниз:
1
2
3
7
8
9
4
5
6
4
5
6
7
8
9
1
2
3
«С»: Пиксели рисунка закодированы числами (обозначающими
цвет) в виде матрицы, содержащей N строк и M столбцов.
Выполните поворот рисунка вправо на 90 градусов:
1
2
3
7
4
1
4
5
6
8
5
2
7
8
9
9
6
3
К.Ю. Поляков, Е.А. Ерёмин, 2014
http://kpolyakov.spb.ru
English     Русский Правила