2016-08-24 7 views
1
n= input("Enter size for matrix: ") 
l=[[input("Enter number: ") for i in range(n)]for j in range(n)] 
a=[[0 for i in range(n)]for j in range(n)] 
for i in range(n): 
    for j in range(n): 
     a[j][i]=l[i][j] 
for i in range(n): 
    a[i]=a[i].reverse() 
for i in range(n): 
    for j in range(n): 
     print a[i][j], 
    print 

В принципе, я хочу повернуть квадратную матрицу на 90 градусов. Я хочу не более эффективный фрагмент кода, который может сделать то же самое, но ошибку в этом коде.Какая ошибка в следующем коде? (Python 2.7, матрицы)

Ошибка в NoneType. Пожалуйста исправьте.

+0

Вы ищете транспонирование или поворот? транспонирование [[1, 2], [3, 4]] [[1,3], [2, 4]], но поворот [[1,2], [3,4]] равен [[3 , 1], [4,2]]? –

+0

Поверните на самом деле. Извините, если я не понял. – NigelTroy

+0

ok, вместо того, чтобы переносить и использовать на нем обратную функцию. Вы можете сделать это в одном цикле. Но ваша техника тоже хороша. Если вы заинтересованы в выполнении одного цикла, обратитесь к моему ответу. Как сказал Жан Франсуа Фабр, вам не нужно повторно назначать, когда вы используете обратную операцию. –

ответ

1

Если вы сделаете это:

a[i]=a[i].reverse() 

a[i] получает None как reverse работы в месте и влияет a[i] непосредственно.

Вобщ:

a[i].reverse() 

BTW это упрощение приводит нас к красивым изменениям, чтобы избежать индексов (и ошибки :)):

for l in a: 
    l.reverse() 
+0

Thx много! Начальный программист здесь, студент. Все еще изучаю все это. – NigelTroy

+0

вы можете принять ответ, если он работает (я не тестировал весь ваш код, поэтому я не уверен на 100%) –

+0

хорошо объяснил @ Jean-FrançoisFabre –

0

Если вы хотите, чтобы повернуть матрицу на 90

L = [

[1, 2],

[3, 4]

]

rotated_l = [

[3, 1],

[4, 2]

]

Код для вращающаяся матрица:

n= input("Enter size for matrix: ") 
l=[[input("Enter number: ") for i in range(n)]for j in range(n)] 
a =[[0 for i in range(n)]for j in range(n)] 
for i in range(n): 
    for j in range(n): 
     a[i][j] = l[n-j-1][i] 
print a 

Если вы хотите, чтобы транспонировать матрицу

transposed_l = [

[1, 3],

[2, 4]

]

Код для перенос матрицы:

n= input("Enter size for matrix: ") 
l=[[input("Enter number: ") for i in range(n)]for j in range(n)] 
a =[[0 for i in range(n)]for j in range(n)] 
for i in range(n): 
    for j in range(n): 
     a[i][j] = l[j][i] 
print a 
Смежные вопросы