简体   繁体   English

将列表与两个元组进行比较

[英]Comparing a list with two tuples

I want to compare the first element in my list "i" with my first tuple "i0_prior" and by compare I mean to check if it is close to (+-a) the numbers in the tuple.我想将列表“i”中的第一个元素与我的第一个元组“i0_prior”进行比较,通过比较我的意思是检查它是否接近 (+-a) 元组中的数字。 The same applies to the second element and the 2nd tuple "i1_prior".这同样适用于第二个元素和第二个元组“i1_prior”。 I hardcoded it because the tuples were "only" 20 numbers wide.我对其进行了硬编码,因为元组“只有”20 个数字宽。 But is there a more suited way to do it?但是有没有更合适的方法呢?

    for i in blured[0, :]:
            if (i[0] in range(i0_prior[0]-a, i0_prior[0]+a) and i[1] in range(i1_prior[0]-b, i1_prior[0]-b) or
                    i[0] in range(i0_prior[1]-a, i0_prior[1]+a) and i[1] in range(i1_prior[1]-b, i1_prior[1]-b) or
                    i[0] in range(i0_prior[2]-a, i0_prior[2]+a) and i[1] in range(i1_prior[2]-b, i1_prior[2]-b) or
                    i[0] in range(i0_prior[3]-a, i0_prior[3]+a) and i[1] in range(i1_prior[3]-b, i1_prior[3]-b) or
                    i[0] in range(i0_prior[4]-a, i0_prior[4]+a) and i[1] in range(i1_prior[4]-b, i1_prior[4]-b) or
                    i[0] in range(i0_prior[5]-a, i0_prior[5]+a) and i[1] in range(i1_prior[5]-b, i1_prior[5]-b) or
                    i[0] in range(i0_prior[6]-a, i0_prior[6]+a) and i[1] in range(i1_prior[6]-b, i1_prior[6]-b) or
                    i[0] in range(i0_prior[7]-a, i0_prior[7]+a) and i[1] in range(i1_prior[7]-b, i1_prior[7]-b) or
                    i[0] in range(i0_prior[8]-a, i0_prior[8]+a) and i[1] in range(i1_prior[8]-b, i1_prior[8]-b) or
                    i[0] in range(i0_prior[9]-a, i0_prior[9]+a) and i[1] in range(i1_prior[9]-b, i1_prior[9]-b) or
                    i[0] in range(i0_prior[10]-a, i0_prior[10]+a) and i[1] in range(i1_prior[10]-b, i1_prior[10]+b) or
                    i[0] in range(i0_prior[11]-a, i0_prior[11]+a) and i[1] in range(i1_prior[11]-b, i1_prior[11]+b) or
                    i[0] in range(i0_prior[12]-a, i0_prior[12]+a) and i[1] in range(i1_prior[12]-b, i1_prior[12]+b) or
                    i[0] in range(i0_prior[13]-a, i0_prior[13]+a) and i[1] in range(i1_prior[13]-b, i1_prior[13]+b) or
                    i[0] in range(i0_prior[14]-a, i0_prior[14]+a) and i[1] in range(i1_prior[14]-b, i1_prior[14]+b) or
                    i[0] in range(i0_prior[15]-a, i0_prior[15]+a) and i[1] in range(i1_prior[15]-b, i1_prior[15]+b) or
                    i[0] in range(i0_prior[16]-a, i0_prior[16]+a) and i[1] in range(i1_prior[16]-b, i1_prior[16]+b) or
                    i[0] in range(i0_prior[17]-a, i0_prior[17]+a) and i[1] in range(i1_prior[17]-b, i1_prior[17]+b) or
                    i[0] in range(i0_prior[18]-a, i0_prior[18]+a) and i[1] in range(i1_prior[18]-b, i1_prior[18]+b) or
                    i[0] in range(i0_prior[19]-a, i0_prior[19]+a) and i[1] in range(i1_prior[19]-b, i1_prior[19]+b)):

And yes the and operator is needed here, because the positions in both tuples are kinda "linked".是的,这里需要 and 运算符,因为两个元组中的位置有点“链接”。

The easy way is to zip the two tuples together:简单的方法是将zip两个元组放在一起:

for i in blured:
    if any(
        i[0] in range(prior0-a, prior0+a)
        and i[1] in range(prior1-b, prior1-b)
        for prior0, prior1 in zip(i0_prior, i1_prior)
    ):
        # do thing

You could also iterate over range(20) :您还可以遍历range(20)

for i in blured:
    if any(
        i[0] in range(i0_prior[n]-a, i0_prior[n]+a)
        and i[1] in range(i1_prior[n]-b, i1_prior[n]-b)
        for n in range(20)
    ):
        # do thing

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM