как изменить каждый вложенный список в другой индекс? - PullRequest
0 голосов
/ 06 февраля 2020

Предположим, у меня есть список:

    lst = [[1,1,1], [1,1,1], [1,1,1], [1,2,3], [1,2,3], [1,2,3]] # 3n sublists

И я хочу, чтобы он был:

    [[2,1,1], [1,2,1], [1,1,2], [2,2,3], [1,3,3], [1,2,4]]

Идея состоит в том, чтобы добавить 1 к каждому подсписку следующим образом:

каждый раз, когда я меняю другой подсписок на порядок 0,1,2:

lst [i] [0 или 1 или 2] + = 1 в соответствии с порядком подсписков. Например: 1-ый подсписок будет lst [0] [0] + = 1

4-ый подсписок будет: lst [3] [0] + = 1

большой список содержит 3n подсписков длиной 3

Я пытался

    lst = [[1,1,1], [1,1,1], [1,1,1]]            
    for i in range(len(lst)):
        for j in (0,1,2):
            lst[i][j] += 1

и он возвращает

    [[2, 2, 2], [2, 2, 2], [2, 2, 2]]

indtead из

    [[2,1,1], [1,2,1], [1,1,2]]

Потому что я итерировал по каждому подсписку, по каждому элементу в нем. Как перейти ко второму подсписку сразу после изменения объекта, который я хочу?

Ответы [ 5 ]

0 голосов
/ 06 февраля 2020

Вы можете использовать понимание списка:

lst = [[1,1,1], [1,1,1], [1,1,1], [1,2,3], [1,2,3], [1,2,3]]
new_lst = [[k+1 if j == i%3 else k for j, k in enumerate(a)] for i, a in enumerate(lst)]

Вывод:

[[2, 1, 1], [1, 2, 1], [1, 1, 2], [2, 2, 3], [1, 3, 3], [1, 2, 4]]
0 голосов
/ 06 февраля 2020

Здесь вы хотите изменить значение по разному индексу в каждом подсписке: вам потребуется сохранить текущий индекс в подсписке, для которого необходимо изменить значение. Поскольку размер подсписка равен 3. Мы рассчитаем текущий индекс в подсписке, используя операцию мода. Как показано в следующем фрагменте кода:

lst = [[1, 1, 2], [1, 2, 1], [1, 1, 1]]
j = 0
for i in range(len(lst)):
    lst[i][j] += 1
    j = (j + 1) % 3
print(lst)

Вывод: [[2, 1, 2], [1, 3, 1], [1, 1, 2]]

0 голосов
/ 06 февраля 2020

То, что вы хотите, использует zip:

lst = [[1,1,2], [1,2,1], [1,1,1]]            
for i,j in zip(range(len(lst)), (0,1,2)):
     lst[i][j] += 1
lst
#[[2, 1, 2], [1, 3, 1], [1, 1, 2]]
0 голосов
/ 06 февраля 2020

Вы можете сделать это с помощью простого for l oop, не нужно использовать zip или enumerate

for i in range(len(lst)):
    lst[i][i] += 1

print(lst) # [[2, 1, 2], [1, 3, 1], [1, 1, 2]]
0 голосов
/ 06 февраля 2020

Это один подход с использованием enumerate.

Пример:

lst = [[1,1,2], [1,2,1], [1,1,1]]

for idx, v in enumerate(lst):
    v[idx] += 1
print(lst)

Выход:

[[2, 1, 2], [1, 3, 1], [1, 1, 2]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...