Уведомления

Группа в Telegram: @pythonsu

#1 Март 29, 2017 21:31:23

vzhicharra
Зарегистрирован: 2013-10-01
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с генерацией массива

Есть школьная задачка. вводится число, необходимо создать квадратную матрицу, в диагоналях - единицы, все что сверху диагонали - нули, все что ниже - двойки.
Казалось бы - все элементарно.
я создаю массив нулей, потом обхожу его, сравниваю индексы, перезаписываю значения
Но внезапно возникает непонятка которая зависит от способа генерации начального массива
если массив создается так:

 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])

Отредактировано vzhicharra (Март 29, 2017 21:32:32)

Офлайн

#2 Март 29, 2017 22:02:41

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Проблема с генерацией массива

ну потому что второй алгоритм делает не то что первый

 >>> 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
>>>
умножая список на чило, вы выполяете повтор списка а не создаете копию



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 29, 2017 22:06:49)

Офлайн

#3 Март 29, 2017 22:08:08

vzhicharra
Зарегистрирован: 2013-10-01
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с генерацией массива

ага, понял, спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version