【问题标题】:Comparing a list with two tuples将列表与两个元组进行比较
【发布时间】:2020-05-07 05:53:50
【问题描述】:

我想将列表“i”中的第一个元素与我的第一个元组“i0_prior”进行比较,比较的意思是检查它是否接近 (+-a) 元组中的数字。这同样适用于第二个元素和第二个元组“i1_prior”。 我对其进行了硬编码,因为元组“只有”20 个数字宽。但是有没有更合适的方法呢?

    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 运算符,因为两个元组中的位置有点“链接”。

【问题讨论】:

  • 我正在尝试分析一个视频,所以我的两个元组都在改变每一帧,但这里有一个例子:...... ,傻我
  • 用示例更新您的问题。尚未发布示例
  • i: [376 106 7] ////// i0_prior = [526, 235, 424, 534, 234, 237, 342, 123, 541, 125, 643, 764, 453, 375, 534, 231, 123, 523, 128, 834] ///// i1_prior = [213, 345, 643, 126, 456, 104, 523, 632, 805, 243, 653, 734, 734, 682, 143、723、624、654、213、312]
  • 您需要更新问题。编辑问题。不要将示例放在 cmets 部分

标签: python python-3.x list for-loop tuples


【解决方案1】:

简单的方法是将两个元组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

你也可以遍历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

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多