带有谓词的python min函数

pyhon min function with predicate

假设我们有一个 nxk 矩阵,其布尔值表示项目的位置。您的位置已知,我们希望找到离我们最近的商品。

我想用python的min函数一句话写出来。 (长实现已知)

我希望写出如下内容:

min_dist = min(distance(my_location, (x,y)) for x,y in
/*range(n),range(k) such that item_matrix[x][y] == True*/ )

有办法实现吗?

使用两个 for 循环和一个 if 条件(换行符是可选的,只是为了更好的可读性):

min_dist = min(distance(my_location, (x,y))
               for x in range(n)
               for y in range(k)
               if item_matrix[x][y])

或使用itertools.product:

from itertools import product
min_dist = min(distance(my_location, (x,y))
               for (x, y) in product(range(n), range(k))
               if item_matrix[x][y])

只有item_matrix可以包含除True之外的其他"truthy"值时才需要== True部分,例如数字,字符串等,但仅当TrueFalse.