Python,动态更改嵌套循环的顺序

时间:2014-11-18 17:02:06

标签: python for-loop

所以我想我可能想要这样做,但后来意识到我不需要,因为它不会实现任何目标。而目前,我无法想到你可能需要的理由,所以更多的是好奇心问题。

有没有办法改变执行一组嵌套循环的顺序?

例如

;

说我有类似的东西:

for j in js:
  for k in ks:
    for l in ls:
      #do something

有没有办法可以动态交换for j in ...for k in ...行来改变在主循环体​​中完成事情的顺序?

我应该说,我意识到我可以用类似

之类的东西来做
variable_lists_list = [js, ks, lk]
for a in variable_lists_list[preference1]:
  for b in variable_lists_list[preference1]:
    for c in variable_lists_list[preference1]:
      #Do something

但是有一种 neater 方式,这样我就可以使用j,k,l而不必担心实际上没有来自相应的js, ks, ls列表吗?

我想的越多,我就越认为如果你不得不使用这样的结构,你应该重新考虑这个问题,因为它只会让人感到困惑,但我仍然坚持下去。这可能吗?

我最初在考虑它可能有用的地方的情况是,当由于某些事情而导致循环突然发生时,也许如果你正在寻找某些东西并且有一些知识可以帮助你决定循环哪些变量过度优先。除此之外,还有一些像这样的系统有用的情况吗?

2 个答案:

答案 0 :(得分:1)

好吧,我通常会有条件地分配循环的目标。您还可以使用包含赋值的关联数组。

if SOMECONDITION1:
  target1 = js
  target2 = ks
  target3 = ls
elif SOMECONDITION2:
  target1 = ks
  target2 = ls
  target3 = js
elif SOMECONDITION3:
  target1 = ls
  target2 = js
  target3 = ks

for j in js:
  for k in ks:
    for l in ls:

答案 1 :(得分:1)

以下是使用itertools.product

进行简化的示例
from itertools import product

a = [1,2,3]
b = 'abc'
c = ['foo', 'bar', 'baz']

if <some condition>:
    lists = a, b, c
else:
    lists = c, a, b

for x,y,z in product(*lists):
    print x,y,z