【问题标题】:Is there a way to skip a value from itertools.product loop in Python?有没有办法从 Python 中的 itertools.product 循环中跳过一个值?
【发布时间】:2019-08-07 22:33:52
【问题描述】:

我正在制作一个脚本来比较两个地址之间的距离,这些地址存储在两个不同的 .csv 文件中,并与 itertools.product 结合在一起。

比较是一个if 条件,用于检查地址之间是否相距 1 公里。

addresses1 中的每个地址都需要与addresses2 中的每个地址进行比较。

如果addresses1中的地址与addresses2中的地址相距1公里,则需要进行下一次比较。因为列表太长,等待是浪费时间继续下一个。 - 这就是问题所在。

我尝试使用continue,但它不起作用。

假设我有两个地址列表:

addresses1 = ["Address1","Address2","Address3","Address4"]
addresses2 = ["compAddress1","compAddress2,"compAddress3","compAddress4","compAddress5"]

producted_list = list(itertools.product(addresses1, addresses2))

for a,b in producted_list:
    BLOCK OF CODE WITH GEOLOCATIONS

    if(distance == 1km):
        print("Addresses are within 1km from each other, move on next one")
        continue

让我们看看它是如何比较的:

a[0] -> b[0]
a[0] -> b[1]
a[0] -> b[2]
a[0] -> b[3]
a[0] -> b[4]

a[1] -> b[0]
a[1] -> b[1]
a[1] -> b[2]
a[1] -> b[3]
a[1] -> b[4]

a[2] -> b[0]
a[2] -> b[1]
a[2] -> b[2]
a[2] -> b[3]
a[2] -> b[4]
.
.
.

假设a[1]b[0] 匹配,我想立即继续a[2] 而不是继续a[1]b[] 的其余部分相比

我尝试使用来自 Eric https://stackoverflow.com/a/14829934/11417917 的代码

for a in b:
    def doWork():
        for c in d:
                if somecondition:
                    return # <continue the for a in b loop?>
    doWork()

但它不工作,它中断,或者它需要改变。

【问题讨论】:

  • 你最好写两个循环而不是试图过滤产品。
  • 这是同一回事,如果我像其他编程语言一样使用两个 for 循环,则无法正常工作。

标签: python python-3.x csv itertools


【解决方案1】:

您从引用的副本中错过了适用的解决方案。你需要break内循环;这自然会继续外循环:

for a in addresses_1:
    for b in addresses_2:
        if distance(a, b) <= 1.00:
            print(a, b, "are within 1 km")
            break

【讨论】:

  • 终于工作了。真是难以置信……我无法想象一个多么愚蠢的小姐。
  • 我们中的大多数人可以想象——我们曾经去过那里。你觉得我是怎么认出这个的? :-)
【解决方案2】:

只要写两个循环,跳出内循环继续外循环:

addresses1 = ["Address1", "Address2", "Address3", "Address4"]
addresses2 = ["compAddress1", "compAddress2", "compAddress3", "compAddress4", "compAddress5"]

for a in addresses1:
    for b in addresses2:
        BLOCK OF CODE WITH GEOLOCATIONS

        if(distance == 1km):
            print("Addresses are within 1km from each other, move on next one")
            break

【讨论】:

    猜你喜欢
    • 2019-01-23
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多