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

问题描述 投票:1回答:1

我想要做的是:我从csv导入并尝试迭代数据以检查匹配。

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

FYI“Pesticide Name”是d_reader文件中列的标题,因此它是Key名称。

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语句,它会打印每次迭代。

我不明白这种行为!请你帮我解释一下吗?

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

python for-loop logic
1个回答
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'])
© www.soinside.com 2019 - 2024. All rights reserved.