Генераторы списков для матричных операций. Примеры
Генераторы списков удобно использовать для матриц (многомерных массивов) чисел заданной размерности. Матрицы можно представлять в виде кортежей или списков.
Лучше матрицы представлять в виде вложенных списков. В наиболее общем случае, представление двумерной матрицы в виде списка на языке Python имеет следующий вид
MatrixName = [ [ a11, a12, . a1n ], [ a21, a22, . a2n ], . [ am1, am2, . amn ] ]
- MatrixName – имя матрицы;
- a11 , …, amn — элементы матрицы. Это могут быть числа, числа с плавающей запятой, символы, строки, логические значения ( true , false ). Также это могут быть более сложные объекты, например, те же списки, кортежи или множества.
Именно генераторы списков являются наиболее удобными для обработки матриц любой размерности, поскольку они позволяют автоматически сканировать строки и столбцы матриц.
2. Примеры решения задач с использованием генераторов списков
2.1. Задачи на построение матриц
2.1.1. Построение матрицы заданной размерности. Элементы матрицы формируются случайным образом
Условие задачи. Построить матрицу заданной размерности m*n и вывести ее на экран. Элементы матрицы формируются случайно и имеют значение от 1 до 10 включительно.
# Генераторы списков # Задача. # Сформировать матрицу размерностью m*n, # где m, n вводяться с клавиатуры. # 1. Подключить модуль random для формирования # случайных чисел import random # 2. Ввести размерность матрицы m = input('m = ') n = input('n = ') # 3. Сформировать матрицу размером m*n. # Значения элементов матрицы формируются # случайным образом в пределах [1, 10]. Matrix = [ [ random.randint(1, 11) for j in range(n)] for i in range(m) ] print('Matrix:') # 4. Вывести результат for i in range(m): print(Matrix[i])
m = 4 n = 5 Matrix: [10, 2, 3, 8, 7] [6, 9, 2, 7, 11] [2, 5, 9, 10, 4] [10, 10, 11, 5, 10]
2.1.2. Формирование двумерной матрицы заданной размерности. Элементы матрицы вводятся с клавиатуры
Условие задачи. Сформировать матрицу размерностью m×n . Значение размеров m , n и значения элементов вводятся с клавиатуры.
# Генераторы списков # Задача. # Сформировать матрицу размером m*n, # где m, n вводятся с клавиатуры. # Элементы матрицы вводятся с клавиатуры. # 1. Ввести размерность матрицы m = input('m = ') n = input('n = ') # 2. Сформировать матрицу размером m*n. # Значения элементов матрицы вводятся с клавиатуры. Matrix = [ [ input("M["+str(i)+"]["+str(j)+"] color: #ff9900;">for j in range(n) ] for i in range(m) ] # 3. Вывести результат print('Matrix:') for i in range(m): print(Matrix[i])
m = 2 n = 3 M[0][0]=1 M[0][1]=2 M[0][2]=3 M[1][0]=4 M[1][1]=5 M[1][2]=6 Matrix: [1, 2, 3] [4, 5, 6]
2.2. Задачи на обработку данных, которые размещаются в матрице
2.2.1. Вычисление количества элементов матрицы, которые больше 5
Условие задачи. Построить матрицу целых чисел размерностью m×n, где m — количество строк матрицы, n — количество столбцов матрицы. Значения m и n вводятся с клавиатуры. Числа в матрице формируются случайным образом и находятся в пределах от 1 до 10. Используя генератор списков вычислить количество элементов матрицы, которые более 5.
# Генераторы списков # Задача. # Построить матрицу целых чисел заданной размерности m * n. # С помощью генератора случайных чисел вычислить # кол-во элементов матрицы, которые более 5. # 1. Подключить модуль random import random # 2. Ввод размеров матрицы m = input("m color: #ff0000;"># количество строк n = input("n color: #ff0000;"># количество столбцов # 3. Формирование матрицы размером m*n случайным образом # с помощью цикла for Matrix = [] # Внешний цикл формирования матрицы Matrix for i in range(m): # Создать строку матрицы в виде списка row = [] # Внутренний цикл формирования строки row for j in range(n): # Сформировать случайное число від 1 до 10 randNumber = random.randint(1, 11) # Добавить случайное число к списку row row.append(randNumber) # Добавить строку row к матрице Matrix Matrix.append(row) # 4. Вывести сформированную матрицу Matrix для контроля print('Matrix M:') for i in range(m): print(Matrix[i]) # 5. С помощью генератора списков вычислить количество элементов, которые больше 5 count = len([ Matrix[i][j] for i in range(m) for j in range(n) if Matrix[i][j]>5 ]) print(count)
m = 3 n = 4 Matrix M: [10, 4, 3, 4] [3, 3, 10, 2] [11, 9, 1, 4] 4
2.2.2. Задача. Исчисление суммы элементов матрицы согласно условию
Условие задачи. Задан двумерный массив целых чисел размером m×n. Определить сумму элементов массива, которые находятся в пределах [5; 10]. Элементы массива вводятся с клавиатуры.
При формировании генератора списка для расчета суммы используется функция sum() .
# Генераторы списков # Задача. # Вычислить сумму элементов матрицы, находящихся в диапазоне [5; 10]. # Размер матрицы m, n и значения элементов вводятся с клавиатуры. # 1. Ввести размерность матрицы m = input('m = ') n = input('n = ') # 2. Сформировать матрицу размером m*n. # Значения элементов матрицы вводятся с клавиатуры. Matrix = [ [ input("M["+str(i)+"]["+str(j)+"] color: #ff9900;">for j in range(n) ] for i in range(m) ] # 3. Вычислить сумму - использовать генератор списков summ = sum( Matrix[i][j] for i in range(m) for j in range(n) if (Matrix[i][j]>=5)and(Matrix[i][j]<=10)) print("summ color: #333300;">⇑2.3. Задачи на создание новых матриц на основе заданных
2.3.1. Создать третью матрицу C на основе двух матриц A, B
Условие задачи. Заданы две матрицы A, B вещественных чисел. Размерность матриц m×n. Используя генератор списков сформировать третью матрицу C, каждый элемент cij которой определяется по правилу
cij = aij + bij
Решение.
# Генераторы списков # Задача. # На основе матриц A, B сформировать третью матрицу C. # 1. Подключить модуль random для формирования случайных чисел import random # 2. Ввести размерность матриц A, B m = input('m = ') n = input('n = ') # 3. Сформировать матрицы A и B размером m*n. # Значения элементов матриц генерируются случайным образом # и находятся в пределах [ 1; 100] A = [ [random.randint(1, 101) for j in range(n)] for i in range(m) ] B = [ [random.randint(1, 100) for j in range(n)] for i in range(m) ] # 4. Сформировать третью матрицу C C = [ [ A[i][j]+B[i][j] for j in range(n) ] for i in range(m) ] # 5. Вывести матрицу A для контроля print('-------------------------') print("A:") for i in range(m): print(A[i]) # 6. Вывести матрицу B для контроля print('B:') for i in range(m): print(B[i]) # 7. Вывести матрицу C print('C:') for i in range(m): print(C[i])m = 4 n = 6 ------------------------- A: [91, 25, 72, 95, 53, 97] [14, 53, 36, 66, 36, 48] [78, 57, 69, 97, 51, 39] [42, 47, 53, 47, 21, 34] B: [48, 73, 25, 13, 92, 22] [45, 56, 95, 64, 43, 89] [43, 44, 11, 29, 82, 32] [95, 87, 33, 90, 67, 79] C: [139, 98, 97, 108, 145, 119] [59, 109, 131, 130, 79, 137] [121, 101, 80, 126, 133, 71] [137, 134, 86, 137, 88, 113]2.3.2. Создать результирующую матрицу на основе исходной согласно с заданным условием
Условие задачи. Задана квадратная матрица A целых чисел размерностью n . На основе матрицы A образовать матрицу B , каждый элемент которой определяется по правилу:
Для получения результирующей матрицы B использовать генератор списка.
# Генераторы списков # Задача. # На основе матрицы A создать матрицу B согласно правилу: # B[i][j] = A[i][j] + 10 # 1. Подключить модуль random для формирования случайных чисел import random # 2. Ввести размерность матрицы A m = int(input('m = ')) n = int(input('n = ')) # 3. Сформировать матрицу A размером m*n # Значения элементов матрицы генерируются случайным образом # и находятся в пределах [ -10; 10] A = [ [random.randint(-10, 11) for j in range(n)] for i in range(m) ] # 4. Вывести матрицу A для контроля print('-------------------------') print("A:") for i in range(m): print(A[i]) # 5. Формирование матрицы B с помощью генератора списка B = [ [ A[i][j]+10 for j in range(n) ] for i in range(m) ] # 6. Вывести результирующую матрицу B print("B:") for i in range(m): print(B[i])m = 3 n = 5 ------------------------- A: [-4, 10, -5, 2, -6] [10, -3, 5, 10, -7] [7, -9, -3, -3, 11] B: [6, 20, 5, 12, 4] [20, 7, 15, 20, 3] [17, 1, 7, 7, 21]Связанные темы
Двумерные массивы в Python и методы работы с ними
Иногда нам приходится использовать таблицы с данными для решения своих задач. Такие таблицы называются матрицами или двумерными массивами.
В Python подобные таблицы можно представить в виде списка, элементы которого являются другими списками. Для примера создадим таблицу с тремя столбцами и тремя строками, заполненными произвольными буквами:
mas = [['й', 'ц', 'у'], ['к','е','н'], ['г', 'ш', 'щ']] #Вывод всего двумерного массива print(mas) #Вывод первого элемента в первой строке print(mas[0][0]) # Выведет й #Вывод третьего элемента в третьей строке print(mas[2][2]) # Выведет щСоздание двумерных массивов
Создать такой массив в Python можно разными способами. Разберем первый:
# Создание таблицы с размером 3x3, заполненной нулями a = 3 mas = [0] * a for i in range(a): mas[i] = [0] * a print(mas) # Выведет [[0, 0, 0], [0, 0, 0], [0, 0, 0]]Второй способ предполагает создание пустого списка с добавлением в него новых списков. Рассмотрим на примере:
# Создание таблицы с размером 2x2, заполненной единицамиa = 2 mas = [] for i in range(a): mas.append([0] * a) print(mas) # Выведет [[1, 1, 1], [1, 1, 1], [1, 1, 1]]Третьим и самым простым способом является генератор списков с x строками, которые будут состоять из y элементов. Пример:
# Создание таблицы с размером 3x3, заполненной двойками a = 3 mas = [[2] * a for i in range(a)] print(mas) # Выведет [[2, 2, 2], [2, 2, 2], [2, 2, 2]]Способы ввода двумерных массивов
Допустим, нам нужно ввести двумерный массив после запуска нашей программы. Для этого мы можем создать программу, которая будет построчно считывать значения нашего массива, а также количество строк в нем. Рассмотрим на примере:
a=int(input()) mas = [] for i in range(a): mas.append(list(map(int, input().split()))) print(mas)Запускаем программу и сначала вводим количество строк в массиве (допустим, 3). Далее вводим строки в порядке их очереди. Например:
После этого данная программа выведет наш двумерный массив: [[1, 1, 1], [1, 1, 1], [1, 1, 1]].
То же самое можно сделать с помощью генератора двумерных массивов:
mas = [list(map(int, input().split())) for i in range(int(input()))] # Вводим 3 1 1 1 1 1 1 1 1 1 print(mas) # Выведет [[1, 1, 1], [1, 1, 1], [1, 1, 1]]Вывод двумерных массивов
Для обработки и вывода списков используются два вложенных цикла. Первый цикл – по порядковому номеру строки, второй – по ее элементам. Например, вывести массив можно так:
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in range(0, len(mas)): for i2 in range(0, len(mas[i])): print(mas[i][i2], end=' ') print() # Выведет 1 1 1 1 1 1 1 1 1То же самое можно сделать не по индексам, а по значениям массива:
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in mas: for i2 in i: print(i2, end=' ') print() # Выведет 1 1 1 1 1 1 1 1 1Способ с использованием метода join():
mas = [[1, 1, 1], [1, 1, 1], [1, 1, 1]] for i in mas: print(' '.join(list(map(str, i)))) # Выведет 1 1 1 1 1 1 1 1 1Вывод одной из строк двумерного массива можно осуществить с помощью цикла и того же метода join(). Для примера выведем вторую строку в произвольном двумерном массиве:
mas = [[1, 1, 1], [2, 2, 2], [3, 3, 3]] string = 2 for i in mas[string-1]: print(i, end=' ') # Выведет 1 1 1Для вывода определенного столбца в двумерном массиве можно использовать такую программу:
mas = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] column = 2 for i in mas: print(i[column-1], end=' ') # Выведет 2 5 8Обработка двумерных массивов
Составим произвольный двумерный массив с числами и размерностью 4x4:
2 4 7 3 4 5 6 9 1 0 4 2 7 8 4 7Теперь поставим числа в каждой строке по порядку:
mas = [[2, 4, 7, 3], [4, 5, 6, 9], [1, 0, 4, 2], [7, 8, 4, 7]] mas2 = [] for i in mas: mas2.append(sorted(i)) print(mas2) # Выведет [[2, 3, 4, 7], [4, 5, 6, 9], [0, 1, 2, 4], [4, 7, 7, 8]]А теперь расставим все числа по порядку, вне зависимости от их нахождения в определенной строке:
mas = [[2, 4, 7, 3], [4, 5, 6, 9], [1, 0, 4, 2], [7, 8, 4, 7]] mas2 = [] for i in mas: for i2 in i: mas2.append(i2) mas=sorted(mas2) for x in range(0, len(mas), 4): e_c = mas[x : 4 + x] if len(e_c) < 4: e_c = e_c + [None for y in range(n - len(e_c))] print(list(e_c)) # Выведет [0, 1, 2, 2] [3, 4, 4, 4] [4, 5, 6, 7] [7, 7, 8, 9]Итог
Мы разобрались в основах двумерных массивов в Python, научились создавать, вводить и выводить их, а также рассмотрели примеры обработки. Надеюсь, статья оказалась полезной для вас!