【问题标题】:Is there a way to specify a program to do a function once it iterated through an entire for loop, within another for loop?有没有办法指定一个程序在另一个 for 循环中迭代整个 for 循环后执行一个函数?
【发布时间】:2020-08-12 14:09:56
【问题描述】:

这里是 Python 新手用户。我正在尝试让一个程序将来自 .csv 文件的字典行与 dictReader 与我自己的字典数据进行比较。我的程序将从 csv 文件中获取每一行并将其与我的数据的每一列进行比较以找到匹配项。一旦找到所有数据都匹配的行,它将打印出该行的键,即“名称”。

我的问题是,我找不到方法告诉我的程序这样做。我在嵌套 for 循环中的 if 语句中放置了一个中断,因此如果列不匹配,它会立即移动到下一个“名称”行。如果我将 print() 指向嵌套 for 循环的末尾,它只会打印名称,无论列匹配多少次。我只想将名称打印一次,如果所有列都匹配...(就像,如果它到达 for 循环的末尾)

with open(f"databases/{argv[1]}", "r") as dna_database:
    data = csv.DictReader(dna_database)
    for row in data:
        for column in dna:
            if dna[column] != int(row[column]):
                break
            print(row["name"])
    dna_database.close()

【问题讨论】:

    标签: python dictionary for-loop printing


    【解决方案1】:

    使用for 循环的else 子句:

    with open(f"databases/{argv[1]}", "r") as dna_database:
        data = csv.DictReader(dna_database)
        for row in data:
            for column in dna:
                if dna[column] != int(row[column]):
                    break
            else:
                print(row["name"])
    

    else 子句在for 循环过早退出时触发,即“如果它到达 for 循环的末尾”。

    The for-statement

    当项目用尽 [..] 时,else 子句中的套件(如果存在)将被执行,并且循环终止。

    【讨论】:

    • 啊。不知道 else 语句可以与 for 循环一起使用。感谢您的信息!
    • forwhile 中的 else 子句与 if 相比非常令人困惑,如果 if fails you do the else, but with for` 和 while 没有发生中断,你else:,不同的关键字会好很多,循环中break的情况
    【解决方案2】:

    您使用上下文管理器,因此无需调用close()

    with open(f"databases/{argv[1]}", "r") as dna_database:
        data = csv.DictReader(dna_database)
        for row in data:
            found = True
            for column in dna:
                if dna[column] != int(row[column]):
                    found = False
                    break
            if found:
                print(row["name"])
                break # stop: for row
    

    【讨论】:

    • 谢谢!布尔值的大量使用。我会把它放在解决灰质的问题中。
    猜你喜欢
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2018-02-28
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多