Найти - Пользователи
Полная версия: Проблема с генерацией массива
Начало » Python для новичков » Проблема с генерацией массива
1
vzhicharra
Есть школьная задачка. вводится число, необходимо создать квадратную матрицу, в диагоналях - единицы, все что сверху диагонали - нули, все что ниже - двойки.
Казалось бы - все элементарно.
я создаю массив нулей, потом обхожу его, сравниваю индексы, перезаписываю значения
Но внезапно возникает непонятка которая зависит от способа генерации начального массива
если массив создается так:
 a = [­[0 for f in range(n)] for k in range(n)]
то все работает, а вот если вот так:
 a = [­[0]*n]*n

то в дальнейшем начинается какая-то ерунда
более подробно:

     n = int(input('введите n:'))
     
    # a = [[0 for f in range(n)] for k in range(n)]   # если создавать массив так - то все нормально
     
    a = [[0]*n]*n
    for k in range(n):
            print(a[k])
     
    for i in range(n):
        for j in range(n):
            if i==j:
                a[i][j] = 1
                print('i=',i,' j=',j, 'a=',a[i][j])
            elif j>i:
                a[i][j] = 0
                print('i=', i, ' j=', j, 'a=', a[i][j])
            else:
                a[i][j] = 2
                print('i=', i, ' j=', j, 'a=', a[i][j])
        print('***')
        print('a[',i,']=',a[i])
     
    # до этого момента все в порядке
     
    # а дальше начинается какая-то херня
     
    print('a[1][1]=',a[1][1])  # оппа!!!!!!!!! вывродит 2 хотя должно быть 1
     
    print('a:')
     
    #print(a)
     
    for m in range(n):
        print('m:',m)
        print(a[m])
PEHDOM
ну потому что второй алгоритм делает не то что первый
 >>> n=3
>>> a = [[0 for f in range(n)] for k in range(n)]
>>> a[0]
[0, 0, 0]
>>> a[1]
[0, 0, 0]
 >>> a[0] is a[1]
False
>>> a=[[0]*n]*n
>>> a[0]
[0, 0, 0]
>>> a[1]
[0, 0, 0]
>>> a[0] is a[1]
True
>>>
умножая список на чило, вы выполяете повтор списка а не создаете копию
vzhicharra
ага, понял, спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB