Python:为什么在第一次迭代后退出for循环?

时间:2019-04-08 18:07:52

标签: python for-loop logic

我要做什么:我正在从csv导入,并尝试遍历数据以检查是否匹配。

我尝试过的事情: 我正在尝试嵌套的for循环,以遍历较大的列表,并检查较小列表中的每个项目。

FYI“农药名称”是d_reader文件中列的标题,因此它是键名称。

agqfile=open("GCLC-USA-1.csv")
csv_a=csv.reader(agqfile)

d_reader=csv.DictReader(open("Pesticide_output.csv"))

 for row in d_reader:
#     print (row['Pesticide Name'])
    for chem in csv_a:
        print(chem[0],row['Pesticide Name'])
        if chem[0] in row['Pesticide Name']:
             print(chem[0],"found in ",row['Pesticide Name'])
 #     print(row['Pesticide Name'])

我期望的是 外循环在完成之前不应该退出,而是在第一次迭代后退出。 但是,如果我在第二个(嵌套的)for循环之前放置一个print语句,它将打印每次迭代。

我不了解这种行为!请您帮我解释一下吗?

我试图使这个问题尽可能简短,但是如果您需要更多信息,例如数据样本或打印出数据类型,那么我可以提供此信息。 < / p>

1 个答案:

答案 0 :(得分:2)

内部循环在第一个外部迭代中耗尽了文件对象csv_a,因此其他外部行从不进入内部循环。 您必须将内容存储在列表中:

agqfile=open("GCLC-USA-1.csv")
csv_a = list(csv.reader(agqfile))

d_reader=csv.DictReader(open("Pesticide_output.csv"))

for row in d_reader:
#     print (row['Pesticide Name'])
    for chem in csv_a:
        print(chem[0],row['Pesticide Name'])
        if chem[0] in row['Pesticide Name']:
             print(chem[0],"found in ",row['Pesticide Name'])
 #     print(row['Pesticide Name'])