我有一个矩阵,想得到最后一个非负元素。我碰巧已经在数组 b 中有这些索引
a= [[3, 4, 1, 0, 0, 0, 0, 0, 0],
[6, 0, 0, 0, 0, 0, 0, 0, 0],
[24,5, 6, 7, 7, 78, 0, 0, 0],
[4, 56, 0, 0, 0, 0, 0, 0, 0],
[23, 5, 7, 11, 12, 52, 65, 54, 0]]
b = [2, 0, 5, 1, 7]
有没有一种优雅的方法来增加最后的非零元素?
c = [1, 6, 78, 56, 54] from a?
循环有效,但不是很python化。
您可以使用列表推导式并枚举内置函数:
[a[i][j] for i, j in enumerate(b)]
[1, 6, 78, 56, 54]
更pythonic的东西可能是:
a= [[3, 4, 1, 0, 0, 0, 0, 0, 0],
[6, 0, 0, 0, 0, 0, 0, 0, 0],
[24,5, 6, 7, 7, 78, 0, 0, 0],
[4, 56, 0, 0, 0, 0, 0, 0, 0],
[23, 5, 7, 11, 12, 52, 65, 54, 0]]
c = [next(a_element for a_element in sublist[::-1] if a_element>0) for sublist in a ]
但是,如果没有a_element
,这将引发StopIteration
异常>0
我发现的另一种可能性:
a[range(len(b)), b]
类似于@vurmux的(更好的(答案,你也可以zip
:
res = [sub[i] for i, sub in zip(b, a)]
print(res) # -> [1, 6, 78, 56, 54]