如何解决Python:针对的存档迭代
有没有一种我可以利用的方法:执行for
次n 次?
对不起,这听起来让您非常困惑。这是我正在尝试做的事情:
array = [
[
[1,2],[3,4],],[
[100,200],[300,400]
]
]
我正在寻找一个生成器来顺序产生# generator,yields [1,[5,6],[7,8]
。
对于上面的示例数组,让depth为2,深度在不同情况下会有所不同。
这是我到目前为止尝试过的:
array = [
[
[1,400]
]
]
# set a con,increment by 1 before each `for`
con = 0
depth = 2
def loop(arr):
global con
con += 1
if con == depth:
for i in arr:
# the only place to exit the function
yield i
else:
for i in array:
# nest looping
yield loop(i)
for ll in loop(array):
print(ll)
# expected output
# [1,2]
# [3,4]
# [5,6]
# [7,8]
# however I got
# <generator object loop at 0x7f8cc815ac80>
# <generator object loop at 0x7f8cc818c2e0>
我认为问题是在嵌套循环中,在loop
之后我无法调用yield
这整天让我感到困惑,如果有人提供帮助,我将感到非常高兴。
更新
感谢@Nick Parsons,指出了Can generators be recursive?,我可以继续研究,但遇到了递归超出错误:
array = [
[
[1,increment by 1 before each `for`
con = 0
depth = 2
def loop(arr):
global con
con += 1
if con == depth:
for i in arr:
# the only place to exit the function
yield i
else:
for i in array:
# nest looping
yield from loop(i)
for ll in loop(array):
print(ll)
# expected output
# [1,8]
# however I got
RecursionError: maximum recursion depth exceeded in comparison
解决方法
proposed duplicate中指出,您的问题是您正在使用
yield loop(i)
返回生成器,您应该在其中使用
yield from loop(i)
生成递归中的值。
请注意,您可以通过检查传递到函数中的列表元素的类型并重新确定它们是否为列表来简化代码,并使其灵活地处理任何深度的嵌套列表:
def loop(arr):
if type(arr[0]) is list:
for a in arr:
yield from loop(a)
else:
yield arr
for ll in loop(array):
print(ll)
输出:
[1,2]
[3,4]
[100,200]
[300,400]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。