Как эффективно найти индексы строк нескольких элементов в 2D-матрице? - PullRequest
0 голосов
/ 02 июня 2018

скажем,

C = [ [1,2,3],[1,3,4],[3,5,6]]
item_list=[1,3,4]

Я использовал следующий код для выполнения того, что хотел:

    rind = [[i for i in range(len(C)) if item in C[i]]
        for item in item_list]

Я получил кожуру [[0, 1], [0,1, 2], [1]]

Я на самом деле хочу, чтобы мой o / p был в виде 1d-массива, например [0 1 0 1 2 1]

Не могли бы вы предложить совершенно альтернативный вариант?подход к получению индексов строк или посоветуйте мне, как преобразовать список массивов в одномерный массив?

Обратите внимание, что фактический размер C равен 2 M * 4, а item_list равен 20000.

1 Ответ

0 голосов
/ 02 июня 2018

Вы хотите сгладить список.Например:

a = [[0, 1], [0, 1, 2], [1]]
flat_list = [item for sublist in a for item in sublist]


In [5]: flat_list

Out [5]: [0, 1, 0, 1, 2, 1]

В случае вашего конкретного кода,Вы можете сделать:

rind = [[i for i in range(len(C)) if item in C[i]]
        for item in item_list]
rind = [item for sublist in rind for item in sublist]

В качестве альтернативы, вы можете сделать это в одну строку, как это:

rind = list(map(set, [[i for i in range(len(C)) if item in C[i]]
        for item in item_list]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...