我有一个嵌套循环如下:
xl = yl = [a for a in range(1,12)]
ll = [a for a in range(0,6)]
c = 0;
output = []
for x in xl:
for y in yl:
if (y > x):
for l in ll :
output.append("{0}-{1}-{2}".format(x,y,l));
c+=1;
给定c值作为某个术语的位置,我需要得到该术语的值。 例如,如果c = 10,我需要输出的第10个元素。 如果有人告诉我可以给我一个所有嵌套循环的通用公式,那将是很棒的。 我尝试使用谷歌搜索,但我甚至不知道谷歌的条款。
答案 0 :(得分:1)
您已将输出放入数组中,因此您只需查看output[10]
。
至于你要解决的更大问题,我相信你想了解发电机。以下是您与他们合作的方式。首先,将循环放在函数中,然后在所需的位置调用yield
,而不是return
语句。像这样。
def loop_generator ():
xl = yl = [a for a in range(1,12)]
ll = [a for a in range(0,6)]
for x in xl:
for y in yl:
if (y > x):
for l in ll :
yield (x, y, 1)
现在x = loop_generator()
将返回生成器。这是一个对象,每当你在其上调用next
时,它将开始在函数中运行代码并返回下一个调用yield
的点。如果用完yield
,则会引发StopIteration
例外。
所以现在你的代码可以用:
完成my_generator = loop_generator()
# Throw away 9 values
for i in range(9):
next(my_generator)
# Get the one I want
x, y, l = next(my_generator)
# Show what I got.
print "{0}-{1}-{2}".format(x,y,l)
此策略可用于将任何嵌套循环转换为可以逐步执行并从中拉出值的内容。
顺便提一下,Python的本机循环结构都知道调用next
并在StopIteration
上彻底终止,以便以下工作正如您所希望的那样:
for x, y, l in loop_generator():
print "{0}-{1}-{2}".format(x,y,l)