如何有效地在2D矩阵中找到多个元素的行索引?

时间:2018-06-01 21:58:49

标签: python arrays python-2.7 arraylist indexing

说,

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]

你能否建议一种完全替代方法来获取行索引或建议我如何将数组列表转换为1D数组?

请注意,C的实际大小为2 M * 4,item_list为20000。

1 个答案:

答案 0 :(得分:1)

您想要flatten列表。例如:

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