Python. Нужно повернуть матрицу на 90 градусов
n = 3
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = len(a)
for i in range(len(a)):
for j in range(len(a[i])):
a[i][j] = a[n-j-1][i]
for z in a:
Дополнен 7 лет назад
n = 3
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
n = len(a)
for i in range(len(a)):
. for j in range(len(a[i])):
. a[i][j] = a[n-j-1][i]
for z in a:
. print(z)
Голосование за лучший ответ
1 2 3
4 5 6
7 8 9
7 4 1
8 5 2
9 6 3
Столбец становится строкой j=i ты верно написал
Столбец = 2-i с учетом что первый есть нулевой
то бишь обменять
a[i][j] с a[j][2-i] (ну и обменять не значит равно)
Володя БарбаричУченик (178) 7 лет назад
то есть ты имеешь в виду в 6 рядке кода должно быть a[i][j] = a[j][2-i].
ноо оно неправильно работает
В Python, как повернуть матрицу на 90 градусов против часовой стрелки?
Вот счетчик вращения матрицы по часовой стрелке в виде одной строки в чистом Python (т.е. без numpy):
new_matrix = [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)]
Если вы хотите сделать это в функции, то
def rotate_matrix( m ): return [[m[j][i] for j in range(len(m))] for i in range(len(m[0])-1,-1,-1)]
и так или иначе, результат для
m = [ [1,2,3], [2,3,3], [5,4,3]]
[[3, 3, 3], [2, 3, 4], [1, 2, 5]]
Кроме того, если вы хотите обычный транспонирование, то простая однострочная версия чистого Python — это
[[m[j][i] for j in range(len(m))] for i in range(len(m[0]))]
Поделиться 11 ноября 2018 в 16:55
Вы можете использовать функцию numpy rot90
import numpy as np m = np.array([[1,2,3], [2,3,3], [5,4,3]]) def rotate_matrix(mat): return np.rot90(mat)
Поделиться 11 ноября 2018 в 16:40
#solution1
print(list(list(x) for x in zip(*m))[::-1])
#solution2
print([[x[i] for x in m] for i in range(len(m))][::-1])
#solution3
r = [] i = 0 for row in m: listToAdd = [item[i] for item in m] r.append(listToAdd) i +=1 print(r[::-1])
Поделиться 30 июня 2021 в 04:23
def rotate_90_degree_anticlckwise(matrix): new_matrix = [] for i in range(len(matrix[0]), 0, -1): new_matrix.append(list(map(lambda x: x[i-1], matrix))) return new_matrix def rotate_90_degree_clckwise(matrix): new_matrix = [] for i in range(len(matrix[0])): li = list(map(lambda x: x[i], matrix)) li.reverse() new_matrix.append(li) return new_matrix def rotate_90_degree_clckwise_by_zip_method(matrix): return list(list(x)[::-1] for x in zip(*matrix))
Поделиться 16 сентября 2019 в 14:13
Посмотрите на этот код. Это способ повернуть любую матрицу на 90 градусов с помощью нуля
[Это код, чтобы матрица повернулась на 90 градусов][1]
n = input("enter input:") l =[] while (n !=""): l.append(n.split(" ")) n = input("enter input:") l1=[] for i in range(len(l[0])): l1.append([]) for j in range (len(l1)): for p in range(len(l)): l1[j].append(l[p][-(j+1)]) for s in l1: print(*s) ''' [1]: https://i.stack.imgur.com/c8jHC.png
Поделиться 04 июля 2021 в 17:01
Переключитесь по вертикали (влево вправо), затем транспонируйте:
m = [[1,2,3], [2,3,3], [5,4,3]] print([list(x) for x in zip(*[x[::-1] for x in m])])
Поделиться 04 июля 2022 в 12:20
Просто переверните матрицу по вертикали, а затем переключите правый верхний треугольник с левым нижним треугольником
def rotate_matrix_ccw(mat): if mat is None: return None n = len(mat) if n == 1: return mat for i in range(n): if len(mat[i]) != n: raise Exception("Matrix must be square") # flip the matrix vertically for j in range(n // 2): for i in range(n): mat[i][j], mat[i][n - 1 - j] = mat[i][n - 1 - j], mat[i][j] # switch the upper-right triangle with the lower-left triangle for i in range(n): for j in range(i): mat[i][j], mat[j][i] = mat[j][i], mat[i][j] return mat
Поделиться 30 сентября 2020 в 22:43
def rotateMatrix(self, matrix): for i in range(len(matrix)): for j in range(i): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] matrix.reverse()
Поделиться 13 июля 2022 в 03:23
Матрица вращения против часовой стрелки 90 градусов (На месте)
def rotate(matrix): for i in range(len(matrix) - 1, -1, -1): for j in range(i): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] matrix.reverse()
Матрица вращения против часовой стрелки 90 градусов (На месте)
def rotate(matrix): matrix.reverse() for i in range(len(matrix)): for j in range(i): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
Поделиться 30 августа 2022 в 07:04
Если вы работаете с квадратными матрицами (строки == столбцы), то вы можете использовать это:
list(zip(*reversed(a))) # 90 degrees clockwise
list(zip(*reversed(a)))[::-1] # 90 degrees counter-clockwise
Поделиться 16 октября 2022 в 21:54
def rotated_array(array): new_array = np.zeros([array.shape[0], array.shape[1]]) for i in range(array.shape[0]): for j in range(array.shape[1]): t = array.shape[0]-j-1 # To Start with last row and first column new_array[i, j] = array[t, i] return new_array
Поделиться 13 января 2023 в 07:07
Вы можете пройти циклом по исходной матрице и создать новую. Это мой подход к против часовой стрелке, для другого способа он будет похож. Это не требует, чтобы он был квадратом.
def left_rotate(mat): if not mat: return [] colcount = len(mat[0]) # Initialize empty lists new = [list() for _ in range(colcount)] # Go through the rows, append elements one by one for row in mat: for j in range(colcount): new[j].append(row[colcount - 1 - j]) return new
>>> print(left_rotate([[1, 2], [3, 4], [5, 6]])) [[2, 4, 6], [1, 3, 5]]
Поворот матрицы на 90 градусов по часовой стрелке

Поскольку в стандартной библиотеке Python подобная функция
отсутствует, надо создать собственную специальную
функцию list_rot90(data, times), способную повернуть «двумерный
список» (список списков) на 90 градусов по часовой стрелке.
Функция принимает в себя «двумерный» список (список списков) data и
количество поворотов times, которые необходимо произвести (целое
число, по умолчанию равное 1). Она должна вернуть новый
«двумерный» список (список списков).
Помогите написать предлагаемую функцию. Ничего, кроме этой
функции, в файле решения размещать не надо.
Ввод:
from solution import list_rot90
data = [[8, 2], [9, 5]]
times = 1
print(data, times)
print(list_rot90(data, times))
Как повернуть массив на 90 градусов python
Проще всего это будет сделать с помощью Numpy:
import numpy as np l = [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 1]] a = np.array(l) # a = array([[0, 0, 0, 0], # [0, 0, 0, 1], # [0, 0, 0, 1], # [0, 0, 0, 1]], dtype=int64) # поворот: np.rot90(a) # a = array([[0, 1, 1, 1], # [0, 0, 0, 0], # [0, 0, 0, 0], # [0, 0, 0, 0]], dtype=int64) # можно несколько раз повернуть: np.rot90(a, k=2) # a = array([[1, 0, 0, 0], # [1, 0, 0, 0], # [1, 0, 0, 0], # [0, 0, 0, 0]], dtype=int64) # "вернуть" к обычному списку списков: np.rot90(a).tolist() # => [[0, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Соответственно для поворота по часовой стрелке используйте np.rot90(a, k=3) (270 градусов).
Если не использовать Numpy, то для поворота по часовой стрелке есть такой способ:
def transposed(matrix): return [[*col] for col in zip(*matrix)] def rot90: return list(map(reversed, transposed(matrix))) # или в одно действие def rot90(matrix): return [list(reversed(col)) for col in zip(*matrix)]
. а для поворота против часовой:
def rot90(matrix): return [list(row) for row in list(zip(*matrix))[::-1]]