为什么显示对象引用而不是值

时间:2016-12-02 01:27:10

标签: generator python-3.5

我确信这是一个简单的语法问题,但我无法弄清楚为什么我的生成器返回引用而不是预期的值。

0-4GB

1 个答案:

答案 0 :(得分:1)

以下是您的代码的一个小修改版本,但读起来更清晰,更容易理解:

def flatten(val):
    print('--------', val, '----------')
    o = []

    for thing in val:
        print(thing, type(thing))

        if isinstance(thing, int):
            o.append(thing)

        if isinstance(thing, list):
            for a_thing in thing:
                if isinstance(a_thing, int):
                    o.append(a_thing)

    return o

if __name__ == '__main__':
    result = flatten([0, [1], 2])
    print result
  

[0,1,2]

一些建议: 虽然这个脚本可以用于实验,但您最终可能需要recursion来解决此类问题。递归函数是一种调用自身来完成工作的函数。要问的问题是:如果输入数组包含[0,[1,2,3],[4]]怎么办?在这种情况下,您将需要一个嵌套循环来解决问题。当您的输入如下所示时,问题会变得更加复杂:[0,[1,2,[3,4]],[5]]。在这种情况下,使用递归函数。

以下是递归函数如何解决问题:

def flatten(*args):
    number_list = []
    for item in args:
        if isinstance(item, int):
            number_list.append(item)
        else:
            number_list += flatten(*item)

    return number_list

if __name__ == '__main__':
    print flatten([0, [1, 2, [3, 4, 5]], 6])
  

[0,1,2,3,4,5,6]