Py学习  »  Python

Python生成器表达式:如何从循环中添加和条件?

1Z10 • 5 年前 • 1588 次点击  

具有下列距离矩阵 dist :

dist = [[[ 0, 0],
[ 5,  0],
[ 1,  0],
[ 1,  1],
[11,  3],
[ 3,  6],
[ 5,  5]],

[[ 5,  0],
[ 0,  0],
[ 6,  0],
[ 4,  1],
[ 6,  3],
[ 2,  6],
[10,  5]],

[[ 1,  0],
[ 6,  0],
[ 0,  0],
[ 2,  1],
[12,  3],
[ 4,  6],
[ 4,  5]],

[[ 1,  1],
[ 4,  1],
[ 2,  1],
[ 0,  0],
[10,  2],
[ 2,  7],
[ 6,  6]],

[[11,  3],
[ 6,  3],
[12,  3],
[10,  2],
[ 0,  0],
[ 8,  9],
[16,  8]],

[[ 3,  6],
[ 2,  6],
[ 4,  6],
[ 2,  7],
[ 8,  9],
[ 0,  0],
[ 8,  1]],

[[ 5,  5],
[10,  5],
[ 4,  5],
[ 6,  6],
[16,  8],
[ 8,  1],
[ 0,  0]]]

我需要建立一个 generator expression 具有 AND 这种情况:

gexp = (dist[:, :, 0] <= 1) & (dist[:, :, 1] <= 2)

意思是我想要一个 True 当两个条件都成立时(对于列0和列1),如下所示(我将其打印为列表理解语法):

[array([[ True, False,  True,  True, False, False, False],
       [False,  True, False, False, False, False, False],
       [ True, False,  True, False, False, False, False],
       [ True, False, False,  True, False, False, False],
       [False, False, False, False,  True, False, False],
       [False, False, False, False, False,  True, False],
       [False, False, False, False, False, False,  True]])]

我有一个列列表:

columns = ['weight', 'height']

它们的阈值:

thresholds = {'weight': 1.0, 'height': 1.0}

以及相应的指标:

indexes = {'weight': 0, 'height': 1}

我试图以这种方式构建生成器表达式:

    dynamic_gexpr = [dist[:,:,indexes.get(column)] <= thresholds.get(column) for column in columns]

但我不知道如何在一列和另一列之间添加AND条件。上面的表达式似乎更像或条件一样处理它,给出以下输出:

[array([[ True, False,  True,  True, False, False, False],
       [False,  True, False, False, False, False, False],
       [ True, False,  True, False, False, False, False],
       [ True, False, False,  True, False, False, False],
       [False, False, False, False,  True, False, False],
       [False, False, False, False, False,  True, False],
       [False, False, False, False, False, False,  True]]), array([[ True,  True,  True,  True, False, False, False],
       [ True,  True,  True,  True, False, False, False],
       [ True,  True,  True,  True, False, False, False],
       [ True,  True,  True,  True, False, False, False],
       [False, False, False, False,  True, False, False],
       [False, False, False, False, False,  True,  True],
       [False, False, False, False, False,  True,  True]])]
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49611
 
1588 次点击  
文章 [ 3 ]  |  最新文章 5 年前