选择2D阵列的二维特定元素

时间:2018-06-05 09:13:38

标签: python python-3.x list

我在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]] ]

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

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

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]

答案 1 :(得分:1)

如果您被允许使用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])

答案 2 :(得分:0)

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]

答案 3 :(得分:0)

尝试使用select * from tickets ticket join ticket_entries entry on ticket.id=entry.ticket_id group by ticket.id having count(*) = 1 并在其中使用maplambda

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