【问题标题】:issues in printing next() in python 3在 python 3 中打印 next() 的问题
【发布时间】:2019-07-31 10:00:36
【问题描述】:

python 3 中的命令 print(next()) 有一个奇怪的问题。

当我使用它在控制台上打印时,它工作得很好,但是当我尝试将输出保存到文件中时,它就不起作用了! 我使用的命令如下:

for item in final:
    fasta = open(fname) # fname is the name if input file
    for line in fasta:
        line = line.strip()
        if item in line:
            item = item.strip()
            print('Line:', line, '\nNext line:', next(fasta)) # this works perfectly!
            print(line, next(fasta), file=open('finalList.fa', "a")) # this one doesn't work!

我从最后一个命令的 next(fasta) 部分得到的输出是 line+2 而不是 line+1,例如我从控制台命令的打印中得到的那个。

有人知道发生了什么吗?任何提示将不胜感激!

提前谢谢大家。

谨此

费尔南达·科斯塔

【问题讨论】:

  • 是的,我刚刚意识到这就是问题所在!我以前从未使用过 next() 命令!谢谢@Carcigenicate

标签: python python-3.x printing next


【解决方案1】:

Calling next advances the given iterator(在这种情况下为fasta)。多次调用它将多次推进它并导致元素被跳过。如果要在不同的地方使用数据,则需要将返回值保存在变量中:

if item in line:
    data = next(fasta) # Save it here
    item = item.strip()
    print('Line:', line, '\nNext line:', data) # Then use it multiple times here and below
    print(line, data, file=open('finalList.fa', "a"))

【讨论】:

  • 谢谢!对不起,菜鸟问题
  • @FernandaCosta 没问题。我们都曾在某一时刻犯过类似的错误。
【解决方案2】:

你有没有尝试过创建一个变量并在这个变量中传递next(foo)的值,最后打印这个变量?

【讨论】:

  • 没问题,可惜其他人只是重复我的解决方案来获得声誉
  • 您发布了一个解释不清的答案,被表述为一个问题。当我提供更多细节并且在您发布您的答案之前已经开始写我的答案时,如果说我“只是重复”了您的解决方案,那将是不诚实的。
【解决方案3】:

我刚刚意识到,当您在 python 3 中调用 next() 命令时,它 会正确读取 line+1 并且当我再次调用它时,它会改为考虑下一行(行)行,所以它打印 next(next(line) 即 line+2!

所以我通过删除控制台命令行中的打印来修复它。

谢谢大家,对于菜鸟问题​​感到抱歉!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    相关资源
    最近更新 更多