Python. Основы. Двумерные и многомерные массивы / списки. Лекция 5.2

Содержание

Слайд 2

Иногда для правильного представления набора данных простого одномерного массива недостаточно.
В таких

Иногда для правильного представления набора данных простого одномерного массива недостаточно. В таких
случаях используют двумерные массивы, матрицы и многомерные массивы.
Однако в Python 3 массивов, матриц, по сути, не существует.
Но это не проблема, так как базовые возможности платформы позволяют легко создавать двумерные списки.

Массивы. Матрицы. Списки

Слайд 3

Массивы / Матрицы / Списки

Массивы / Матрицы / Списки

Слайд 4

Пример – Microsoft Excel

Пример – Microsoft Excel

Слайд 5

Массивы / Матрицы / Списки

Массивы / Матрицы / Списки

Слайд 6

L00 L01 L02 L03 L04 L05 ... L0j
L10 L11 L12 L13 L14

L00 L01 L02 L03 L04 L05 ... L0j L10 L11 L12 L13
L15 ... L1j
L20 L21 L22 L23 L24 L25 ... L2j
L30 L31 L32 L33 L34 L35 ... L3j
L40 L41 L42 L43 L44 L45 ... L4j
L50 L51 L52 L53 L54 L55 ... L5j
... ... ... ... ... ... ...
Li0 Li1 Li2 Li3 Li4 Li5 ... Lij

Двумерный список – Номера элементов

Слайд 7

a = [[1, 2, 3], [4, 5, 6]]
print(a[0])
print(a[1])

Вывод двумерного списка

[1, 2, 3]
[4, 5, 6]

Здесь первая строка списка a[0] является

a = [[1, 2, 3], [4, 5, 6]] print(a[0]) print(a[1]) Вывод двумерного
списком из чисел [1, 2, 3].
То есть a[0][0] == 1,
значение a[0][1] == 2,
a[0][2] == 3,
a[1][0] == 4,
a[1][1] == 5,
a[1][2] == 6.

Слайд 8

a = [[2, 4, 6, 8, 10],  [3, 6, 9, 12, 15],  [4, 8, 12, 16, 20]]
print(a) 

Вывод двумерного списка

[[2, 4, 6, 8, 10], [3, 6, 9,

a = [[2, 4, 6, 8, 10], [3, 6, 9, 12, 15],
12, 15], [4, 8, 12, 16, 20]]

Слайд 9

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]]
for i in range(len(a)):
    for j in range(len(a[i])):
        print(a[i][j], end=' ')
    print()

Вывод двумерного списка

1 2 3 4
5 6
7 8 9

Для

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]] for
обработки и вывода списка, как правило, используют два вложенных цикла. Первый цикл перебирает номер строки, второй цикл бежит по элементам внутри строки. Например, вывести двумерный числовой список на экран построчно, разделяя числа пробелами внутри одной строки

Слайд 10

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]]
for row in a:
    for elem in row:
        print(elem, end=' ')
    print()

Вывод двумерного списка

1 2 3 4
5 6
7 8 9

Переменная

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]] for
цикла for в Python может перебирать не только диапазон, создаваемый с помощью функции range(), но и вообще перебирать любые элементы любой последовательности.
Последовательностями в Python являются списки, строки, а также некоторые другие объекты.
Продемонстрируем, как выводить двумерный массив, используя это удобное свойство цикла for:

Слайд 11

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]]
for row in a:
    print(' '.join([str(elem) for elem in row]))

Вывод двумерного списка

1 2 3 4
5 6
7 8 9

Для

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]] for
вывода одной строки можно воспользоваться методом join()

Слайд 12

# Программа Python для демонстрации печати
# строки полного многомерного списка
# по строке.
a = [[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]]
for record in a:
    print(record) 

Вывод двумерного списка

[2, 4, 6, 8, 10]
[3, 6, 9, 12, 15]
[4, 8,

# Программа Python для демонстрации печати # строки полного многомерного списка #
12, 16, 20]

Слайд 13

Создание вложенных списков

Создание вложенных списков

Слайд 14

Пусть даны два числа: количество строк n и количество столбцов m.
Необходимо

Пусть даны два числа: количество строк n и количество столбцов m. Необходимо
создать список размером n×m, заполненный нулями.
n = 3
m = 4
a = [[0] * m] * n
print(a[0])
print(a[1])
print(a[2])

Создание двумерного списка n x m

[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]

Это плохой вариант

Слайд 15

n = 3
m = 4
a = [[0] * m] * n
a[0][0] = 5
print(a[1][0])
print(a[0])
print(a[1])
print(a[2])

Создание двумерного списка n x m

Обратите внимание на номер id у списков.

n = 3 m = 4 a = [[0] * m] *
Если у двух списков id совпадает, то это на самом деле один и тот же список в памяти.

Это плохой вариант

Слайд 16

n = 3
m = 4
a = [0] * n
for i in range(n):
    a[i] = [0] * m
print(a[0])
print(a[1])
print(a[2])

Создание двумерного списка n x m

[0, 0, 0, 0]
[0, 0, 0, 0]
[0,

n = 3 m = 4 a = [0] * n for
0, 0, 0]

Первый способ: сначала создадим список из n элементов (для начала просто из n нулей). Затем сделаем каждый элемент списка ссылкой на другой одномерный список из m элементов:

Слайд 17

n = 3
m = 4
a = []
for i in range(n):
    a.append([0] * m)
print(a[0])
print(a[1])
print(a[2])

Создание двумерного списка n x m

[0, 0, 0, 0]
[0, 0, 0, 0]
[0,

n = 3 m = 4 a = [] for i in
0, 0, 0]

Другой (но похожий) способ: создать пустой список, потом n раз добавить в него новый элемент, являющийся списком-строкой:

Слайд 18

n = 3
m = 4
a = [[0] * m for i in range(n)]
print(a[0])
print(a[1])
print(a[2])

Создание двумерного списка n x m

[0, 0, 0, 0]
[0, 0, 0, 0]
[0,

n = 3 m = 4 a = [[0] * m for
0, 0, 0]

Но еще проще воспользоваться генератором: создать список из n элементов, каждый из которых будет списком, состоящих из m нулей.
В этом случае каждый элемент создается независимо от остальных (заново конструируется список [0] * m для заполнения очередного элемента списка), а не копируются ссылки на один и тот же список.

Слайд 19

a1 = []
for j in range(5):
    a2 = []
    for i in range(5):
        a2.append(0)
    a1.append(a2)
# смотрим полученный результат
print(a1[0])
print(a1[1])
print(a1[2])
print(a1[3])
print(a1[4])

Создание двумерного списка 5 х 5

[0, 0, 0, 0, 0]
[0, 0, 0,

a1 = [] for j in range(5): a2 = [] for i
0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]

Слайд 20

m = 3
n = 6
a = [[0 for x in range(n)] for x in range(m)]
print(a) 

Создание двумерного списка 3 х 6

[[0, 0, 0, 0, 0, 0], [0,

m = 3 n = 6 a = [[0 for x in
0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]

Слайд 21

from random import randint
N=5
M=3
A = [ [0]*M for i in range(N) ]
for i in range(N):
  for j in range(M):
    A[i][j] = randint( 20, 80 )
print(A)

Создание двумерного списка N на M из случайных чисел в диапазоне от

from random import randint N=5 M=3 A = [ [0]*M for i
20 до 80

[[60, 79, 40], [31, 48, 35], [73, 32, 20], [57, 46, 61], [49, 62, 79]]

Слайд 22

Ввод двумерного списка

Ввод двумерного списка

Слайд 23

# в первой строке ввода идёт количество строк массива
n = int(input()) 
a = []
# значения строки вводим через пробел
for i in range(n):
    a.append([int(j) for j in input().split()])
# смотрим полученный результат
print(a[0])
print(a[1])

Ввод двумерного списка

Ввод
2
2 3 4
5 6 7

Вывод
[2, 3, 4]
[5, 6, 7]

# в первой строке ввода идёт количество строк массива n = int(input())

Слайд 24

# в первой строке ввода идёт количество  строк массива
n = int(input()) 
a = []
for i in range(n):
    row = input().split()
    for i in range(len(row)):
        row[i] = int(row[i])
    a.append(row)
# смотрим полученный результат
print(a[0])
print(a[1])

Ввод двумерного списка

Ввод
2
5 8 6
8 9 6
Вывод
[5, 8, 6]
[8, 9, 6]

# в первой строке ввода идёт количество строк массива n = int(input())

Слайд 25

# То же самое и при помощи генератора
# в первой строке ввода идёт количество строк массива
n = int(input()) 
a = [[int(j) for j in input().split()] for i in range(n)]
# смотрим полученный результат
print(a[0])
print(a[1])

Ввод двумерного списка

Ввод
2
8 9 8

# То же самое и при помощи генератора # в первой строке
7
3 6 5

Ввод
[8, 9, 8, 7]
[3, 6, 5]

Слайд 26

Пример обработки двумерного списка

Пример обработки двумерного списка

Слайд 27

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]]
s = 0
for i in range(len(a)):
    for j in range(len(a[i])):
        s += a[i][j]
print(s)

Подсчет суммы всех чисел в списке

45

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]] s

Слайд 28

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]]
s = 0
for row in a:
    for elem in row:
        s += elem
print(s)

Подсчет суммы всех чисел в списке

45

То же самое с циклом не по

a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]] s
индексу, а по значениям строк

Слайд 29

a = [[34, 24, 68, 63], [64, 66, 56, 79], [48, 58, 35, 39]]
N = 3
M = 4
s = 0
for i in range(N):
  for j in range(M):
    s += a[i][j]
print(s)

Подсчет суммы всех чисел в списке

634

Вариант с указанием количества строк и столбцов

a = [[34, 24, 68, 63], [64, 66, 56, 79], [48, 58,
с перебором в цикле

Слайд 30

Методы в многомерных списках

Методы в многомерных списках

Слайд 31

# Добавление подсписка
a = [[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]]
print(a) 
a.append([10, 10, 10, 10, 10])
print(a) 

append (): добавляет элемент в конец списка

[[2, 4, 6, 8, 10], [3,

# Добавление подсписка a = [[2, 4, 6, 8, 10], [3, 6,
6, 9, 12, 15], [4, 8, 12, 16, 20]]
[[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20], [10, 10, 10, 10, 10]]

Слайд 32

# Расширение списка
a = [[2, 4, 6, 8, 9], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]]
print(a) 
a[0].extend([10, 10, 10, 10])
print(a) 

extension (): добавьте элементы списка (или любого итерируемого) в конец текущего списка

[[2,

# Расширение списка a = [[2, 4, 6, 8, 9], [3, 6,
4, 6, 8, 9], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]]
[[2, 4, 6, 8, 9, 10, 10, 10, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]]

Слайд 33

# Сторнирование подсписка
a = [[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]]
print(a) 
a[2].reverse()
print(a) 

reverse (): обратный порядок в списке

[[2, 4, 6, 8, 10], [3, 6,

# Сторнирование подсписка a = [[2, 4, 6, 8, 10], [3, 6,
9, 12, 15], [4, 8, 12, 16, 20]]
[[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [20, 16, 12, 8, 4]]

Слайд 34

array = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
]
result = list(map(sum, array))
print(result)

Сумма значений в строках

[6, 15, 24]

Функция map - самая простая из

array = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]
встроенных в Python, map() применяет указанную функцию к каждому элементу в качестве итератора.

Слайд 35

my_list=[[1,2], [3,4], [5,6]]
for row in my_list:
    print(row)
print("Транспонирование матрицы")    
#list(map(list, zip(*my_list)))
my_list_T=map(list, zip(*my_list))
list(my_list_T)

Транспонирование матрицы

[1, 2]
[3, 4]
[5, 6]
Транспонирование матрицы
[[1, 3, 5], [2, 4, 6]]

my_list=[[1,2], [3,4], [5,6]] for row in my_list: print(row) print("Транспонирование матрицы") #list(map(list, zip(*my_list)))

Слайд 36

КУТУЗОВ Виктор Владимирович

Благодарю
за внимание

Белорусско-Российский университет, Республика Беларусь, Могилев, 2021

Информатика. Программирование на

КУТУЗОВ Виктор Владимирович Благодарю за внимание Белорусско-Российский университет, Республика Беларусь, Могилев, 2021
Python
Тема: Python. Основы. Двумерные и многомерные массивы / списки.

Белорусско-Российский университет
Кафедра «Программное обеспечение информационных технологий»

Имя файла: Python.-Основы.-Двумерные-и-многомерные-массивы-/-списки.-Лекция-5.2.pptx
Количество просмотров: 206
Количество скачиваний: 6