为什么打印结果与功能不同

时间:2016-05-03 18:12:21

标签: python

这是我的Python函数:

def Ggen(word):
     result = []
     while(len(word)!=1):
         a = word.pop()
         b = word
         temp = (a,b)
         print temp
         result.append(temp)
     return result

假设我有数据通话test = ['f','c','a','m','p']

我在函数中print生成的结果是:

('p', ['f', 'c', 'a', 'm'])
('m', ['f', 'c', 'a'])
('a', ['f', 'c'])
('c', ['f'])

但是,如果我运行Ggen(test),我得到了这个:

[('p', ['f']), ('m', ['f']), ('a', ['f']), ('c', ['f'])]

我的代码发生了什么。有人如何从上面得到类似的结果?

1 个答案:

答案 0 :(得分:4)

每次word.pop()您正在更改result中包含的列表的引用。因此,您正在打印中间值,但最终返回的将是退出while循环的word列表。

如果您想要返回所看到的内容,则每次pop时都需要复制一份列表。

def Ggen(word):
    result = []
    while(len(word)!=1):
        result.append((word.pop(),word[:]))
    return result