Как изменить элемент в списке списков, если у него есть определенный индекс и условие, которое выполняется? - PullRequest
0 голосов
/ 06 октября 2018

Я хочу иметь возможность взять список списков (lst) и список индексов и тех элементов в lst, которые имеют эти индексы и также соответствуют условию ( == '1'), которое должно быть изменено на '0'.

Если я введу

lst = [['1','2','3'],[],['4','2','1']]

и

specific_indexes = [(0, 0), (0, 2), (2, 0), (2, 2)]

, я получу [['0', '2', '3'], [], ['4', '2', '0']]

, но я бы хотел более быстрый способ сделать это.

def change(lst, specific_indexes):

    for (x,y) in specific_indexes:
        if lst[y][x] == '1':
            lst[y][x] = '0'
    return lst

1 Ответ

0 голосов
/ 13 января 2019

... но я бы хотел более быстрый способ сделать это.

Если вы заинтересованы в производительности, вы можете использовать специализированную стороннюю библиотеку, такую ​​как NumPy .Это означает, что вы должны определить обычный двумерный массив в качестве входных данных или преобразовать его в один, как показано ниже.

import numpy as np

lst = [['1','2','3'],[],['4','2','1']]
idx = [(0, 0), (0, 2), (2, 0), (2, 2)]

# calculate column number and construct NumPy array
colnum = max(map(len, lst))
arr = np.array([sublst if sublst else ['0'] * colnum for sublst in lst]).astype(int)
idx = np.array(idx)

# calculate indexer and mask array conditionally
mask = np.ix_(idx[:, 1], idx[:, 0])
arr[mask] = np.where(arr[mask] == 1, 0, arr[mask])

print(arr)
# array([[0, 2, 3],
#        [0, 0, 0],
#        [4, 2, 0]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...