我确信这是一个简单的语法问题,但我无法弄清楚为什么我的生成器返回引用而不是预期的值。
0-4GB
答案 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]