【问题标题】:Python not equal 'for' iteration [duplicate]Python不等于'for'迭代[重复]
【发布时间】:2016-01-11 16:41:43
【问题描述】:

在对文本文件和列表进行迭代期间,我发现了for 循环的意外行为。 文本文件 test.txt 仅包含两个字符串:1) He said: 和 2) We said:。 先for+for循环

file_ = open('c:\\Python27\\test.txt', 'r')
list_ = ['Alpha','Bravo','Charlie']
try:
    for string in file_:
        for element in list_:
            print string, element
except StandardError:
    print 'Ooops'

返回绝对预期的结果:

He said: Alpha
He said: Bravo
He said: Charlie
We said: Alpha
We said: Bravo
We said: Charlie

但是如果for的顺序改为

file_ = open('c:\\Python27\\test.txt', 'r')
list_ = ['Alpha','Bravo','Charlie']
try:
    for element in list_:
        for string in file_:
            print string, element
except StandardError:
    print 'Ooops'

结果完全不同:

He said: Alpha
We said: Alpha

看起来第一个 for 变得可以合并了。为什么?

【问题讨论】:

  • 是所有代码吗?
  • lines = file.readlines() 然后对lines 列表进行迭代。

标签: python for-loop


【解决方案1】:

当您完成对文件的 for 循环时,您“使用”它。对于外部循环的每次迭代,您都必须使用file_.seek(0) 回到它的开头。或者使用原始循环排序。

您可以使用这个简化的示例复制该行为:

    for string in file_:
        print string

    for string in file_:
        print string

你会看到第二个循环什么都不做。

【讨论】:

  • 谢谢,这个例子很有说服力
【解决方案2】:

您需要使用file_.seek(0) 返回文件的开头,以便重新遍历其内容。

您已经通过 for string in file_: 对其进行了迭代,因此通过调用 file_.tell() 获得的当前位置将是文件的大小(如果我没记错的话),表示结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多