我在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]] ]
我应该提到b
和a
的长度都是变量n
。
我知道我可以使用带有这些值的循环创建一个列表,但我正在为此寻找语法(类似于map)。
感谢您的帮助。
答案 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
并在其中使用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)))))