Вставить строку в 2D-массив по указанному индексу в цикле - PullRequest
0 голосов
/ 12 декабря 2018

Полагаю, мне следует объяснить мою проблему в матрице.

Я хотел бы получить от этого:

A=[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
   [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
   [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
   [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
   [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

этот:

 A=[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
       [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
       [ 0, 0, 0, 0, 0, **h**, 0, 0, 0, 0, 0], 
       [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
       [ 0, 0, 0, **h**, 0, 0, 0, 0, 0, 0, 0]]

Жирный шрифтбуквы только подчеркивают проблему.Я пытался:

def r(i):
    for k in i[-1:-4:-2]:
        for l in k[3:6:2]:
            k[l]='h'
    print (i)
r(A)

, но он возвращает:

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
['**h**', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
['**h**', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

, что определенно не соответствует моим ожиданиям.Я хочу вставить строки по указанным индексам в 2 шагах от последнего элемента списка списков (последнего списка), начиная с определенного индекса строки.Не могли бы вы мне помочь?

Как вы и просили, я добавляю еще один пример: базовый массив:

B=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

вывод:

B=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, !, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, !, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, !, 0, 0, 0, 0, 0, 0, 0, 0]]

1 Ответ

0 голосов
/ 12 декабря 2018

Вот, пожалуйста:

def r(i, substitution, col_start, row_stop):
    for row, R in enumerate(i):
        found = False
        for col, el in enumerate(R):
            if not found and col >= (col_start + (len(i)-1) - row) and \
                    (col % 2 == col_start % 2) and row > row_stop and \
                    (row % 2 == (len(i)-1) % 2):
                found = True
                i[row][col] = substitution
    return i
A=[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
B=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
   [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
r(A, 'h', 3, 1)
r(B, '!', 1, 2)

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 'h', 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 'h', 0, 0, 0, 0, 0, 0, 0]]
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, '!', 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, '!', 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, '!', 0, 0, 0, 0, 0, 0, 0, 0]]

Напомните, что если вам нужно выполнить такие изменения в коде, или вы веселитесь, или ваш дизайн должен быть изменен.Сохраняйте это простым!

...