【问题标题】:How do I efficiently find the row indices of multiple elements in a 2D matrix?如何有效地找到二维矩阵中多个元素的行索引?
【发布时间】:2018-11-12 01:39:27
【问题描述】:

说,

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 像 [0 1 0 1 2 1] 这样的一维数组

您能否建议一种完全替代的方法来获取行索引,或者建议我如何将数组列表转换为一维数组?

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

【问题讨论】:

    标签: python arrays python-2.7 arraylist indexing


    【解决方案1】:

    您想flatten 列表。例如:

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

    输出[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]))
    

    【讨论】:

    • 我建议在您的列表理解中使用a_set = list(map(set, a))。一次性转换成本可能低于 O(1) 循环查找的好处。
    • 好主意。我会写地图并进行相应的编辑。
    • (刚刚意识到您巧妙地使用set 在这里进行展平,因此不必编写实际地图。很酷的技巧!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 2019-11-17
    • 2017-06-06
    • 1970-01-01
    • 2012-09-10
    • 2014-04-22
    相关资源
    最近更新 更多