代码之家  ›  专栏  ›  技术社区  ›  Kamran Hosseini

选择二维数组的二维特定元素

  •  2
  • Kamran Hosseini  · 技术社区  · 6 年前

    我在python中有一个这样的列表:

    a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
    

    我有一个 b 像这样的数组:

    b = [0, 1, 2, 0]
    

    我怎样才能得到这份名单?

    [ a[0][b[0]], a[1][b[1]], a[2][b[2]], a[3][b[3]] ]
    

    我应该提到的是 a 都是变量 n . 我知道我可以用这些值创建一个循环列表,但是我正在寻找一个语法(类似于map)。

    谢谢你的帮助。

    4 回复  |  直到 6 年前
        1
  •  3
  •   javidcf    6 年前

    快速的方法 zip 是:

    a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
    b = [0, 1, 2, 0]
    result = [ai[bi] for ai, bi in zip(a, b)]
    print(result)
    # [5, 0, 9, 6]
    
        2
  •  1
  •   OriolAbril    6 年前

    如果你被允许使用 numpy ,您可以:

    >>> import numpy as np
    >>> a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
    >>> b = [0, 1, 2, 0]
    >>> arr = np.array(a)
    >>> arr[np.arange(len(a)), b]
    array([5, 0, 9, 6])
    
        3
  •  0
  •   Hearner    6 年前
    a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
    b = [0, 1, 2, 0]
    
    c = list(a[i][b[i]] for i in range(len(a)))
    #or c = list([ai[bi] for ai, bi in zip(a, b)])
    print(c) #return [5, 0, 9, 6]
    
        4
  •  0
  •   U13-Forward    6 年前

    试用使用 map 在里面使用 lambda zip :

    a = [[5, -4, 6], [9, 0, 6], [20, -1, 9], [6, 5, -7]]
    b = [0, 1, 2, 0]
    print(list(map(lambda x: x[0][x[-1]], list(zip(a,b)))))
    

    输出:

    [5, 0, 9, 6]