我有一个矩阵,想得到最后一个非负元素。我碰巧已经在数组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?
一个循环有效,但不是很pythonic。
答案 0 :(得分:3)
答案 1 :(得分:1)
更多的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 ]
但是,如果没有StopIteration
是a_element
,则会引发>0
异常
答案 2 :(得分:1)
类似于@vurmux的(更好)答案,您也可以zip
:
res = [sub[i] for i, sub in zip(b, a)]
print(res) # -> [1, 6, 78, 56, 54]
答案 3 :(得分:1)
我发现的另一种可能性:
a[range(len(b)), b]