如何创建具有双for循环和critieria赋值的列表?

2024-07-07 06:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个pythonic的方法来制作一个元组列表,这个元组查看一系列的点,确定这些点上的像素信息是否符合标准,如果符合,则添加到列表中

我有下面的代码行,我知道这是不正确的,但我希望它解释了我要完成的。“h,s,v=img[iy,((x//2)-ix)]部分是不正确的,因为我认为您不能指定h,s,v我目前拥有的代码

如何在for循环中指定h,s,v=img[]

pointlist = [h,s,v = img[iy,((x//2)-ix)] for ix in range(x//2) for iy in ylist if any((hm-hsm)<h<(hm+hsm) and (sm-ssm)<s<(sm+ssm) and (vm-vsm)<v<(vm+vsm) for hm,sm,vm,hsm,ssm,vsm in csample)]

另一种写这个的方法是:

csample = (60,30,100,15,15,25)

for iy in ylist:
    for (x//2)-ix for ix in range(x//2):
        h,s,v = img[iy,ix]
        if any((hm-hsm)<h<(hm+hsm) and (sm-ssm)<s<(sm+ssm) and (vm-vsm)<v<(vm+vsm) for hm,sm,vm,hsm,ssm,vsm in csample)

Tags: and方法inimgforvmssm元组
1条回答
网友
1楼 · 发布于 2024-07-07 06:19:15

你的要求不是很明确,但我想这就是你的想法:

代码:

有一件事可能需要解释,那就是isgood(*img...)。这将扩展存储在img中的tuple,并将这三个元素作为特殊参数传递给is_good。见here

hm, sm, vm, hsm, ssm, vsm = csample
def is_good(h, s, v):
    return (hm-hsm < h < hm+hsm and
            sm-ssm < s < sm+ssm and
            vm-vsm < v < vm+vsm
            )

point_list = [(ix, iy) for iy in ylist for ix in range(x//2+1)
              if is_good(*img[iy, x//2-ix])]

测试数据:

csample = (60, 30, 100, 15, 15, 25)

img = (
    ((1, 2, 3), (1, 2, 3)),
    ((60, 30, 100), (1, 2, 3)),
)
ylist = [0, 1]
x = 2

产生:

[(1, 1)]

相关问题 更多 >