Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打印函数输出的第n行_Python_Recursion_Slice - Fatal编程技术网

Python 如何打印函数输出的第n行

Python 如何打印函数输出的第n行,python,recursion,slice,Python,Recursion,Slice,如何打印输出“a”的第n行?我试着切“a”,但没用。我似乎也不能重复“a” A = [1,2,3] B = [] C = [] def move(n, pegA, pegB, pegC): if n > 0: move(n - 1, pegA, pegC, pegB) target.append(pegA.pop()) print(len(A), len(B), len(C)) move(n - 1, pegC, p

如何打印输出“a”的第n行?我试着切“a”,但没用。我似乎也不能重复“a”

A = [1,2,3]
B = []
C = []

def move(n, pegA, pegB, pegC):
    if n > 0:
        move(n - 1, pegA, pegC, pegB)
        target.append(pegA.pop())
        print(len(A), len(B), len(C))
        move(n - 1, pegC, pegB, pegA)

a = move(3, A, C, B)
a返回以下输出:

2 0 1
1 1 1
1 2 0
0 2 1
1 1 1
1 0 2
0 0 3

我想能够打印第二行,这是1。我应该重新构造函数“move”吗?

move
的方式构造的函数不会保留它打印的输出的任何记录,而且很难恢复。如果需要按索引查找输出行,则可以返回包含每行输出的列表,如下所示:

def move(n, pegA, pegB, pegC, output_lines=None):
    if output_lines is None:
        output_lines = []
    if n > 0:
        move(n - 1, pegA, pegC, pegB, output_lines)
        target.append(source.pop())
        output_lines.append('%d %d %d' % (len(A), len(B), len(C)))
        move(n - 1, pegC, pegB, pegA, output_lines)
    return output_lines

a = move(3, A, C, B)

# print all lines of output
print('\n'.join(a))

# print 2nd line
print(a[1])

您是否尝试过将输出保存在列表中并从中打印所需的位置。@manasdash我将其称为python中的反模式。只要让步,让消费者决定是否接受这个建议@user633183@user633183:我同意
yield
可能是生产代码的最佳选择,但在我看来这不像生产代码。我认为简洁和易于理解比性能和程序体系结构最佳实践更重要,对于OP和将来看到这个问题的人来说。@lehiester这不是性能问题;这是一个能够以任何方式使用结果而不是打印结果的问题……我会建议更优雅的解决方案,实际使用返回值,而不是忽略它们。让输入参数像一个全局函数一样运行感觉很奇怪。@Mad Physician:我不知道有什么方法可以连接每个递归调用的输出,而不使其比O(n)更糟糕,但也许有一种方法。“我同意这很难看。”莱希斯特说。“是的,总是有不必要的内存崩溃。”物理学家,我相信这是最好的解决方案。我想不出一种方法,可以在递归函数中仅使用
return
s.@Tomothy将其附加到“running total”列表中。您可以按照与通话相同的顺序扩展列表。问题在于,它一路上制造了大量不必要的副本,而不是正常的摊销附件。