我想使用n个不同的变量
var {0},var {1},var {2},...,var {n-1}

我怎样才能做到这一点 ?

for var{0} in range(n)
  for var{1} in [x for x in range(n) if x!=var{0}]:
    for var{2} in [x for x in range(n) if (x!=var{0} and x!=var{1})]:
      ...
        for var{n-1} in [x for x in range(n) if (x!=var{0} and x!=var{1} and ... and x!=var{n-2})]:


谢谢

最佳答案

看来这只是range(n)的排列:

from itertools import permutations
for var in permutations(range(n)):
    # do something with var[0], var[1], ..., var[n-1]
    print var


根据文档


  排列以字典顺序排序。因此,如果对输入的iterable进行排序,则将按排序顺序生成置换元组。


我认为这将为您提供与示例中的方法相同的排序。对于n=3,您将获得:

(0, 1, 2)
(0, 2, 1)
(1, 0, 2)
(1, 2, 0)
(2, 0, 1)
(2, 1, 0)


如果您对它的生成方式感兴趣,则itertools.permutations的源代码在其注释中具有等效的python代码(实际实现在C中):

def permutations(iterable, r=None):
    'permutations(range(3), 2) --> (0,1) (0,2) (1,0) (1,2) (2,0) (2,1)'
    pool = tuple(iterable)
    n = len(pool)
    r = n if r is None else r
    indices = range(n)
    cycles = range(n-r+1, n+1)[::-1]
    yield tuple(pool[i] for i in indices[:r])
    while n:
        for i in reversed(range(r)):
            cycles[i] -= 1
            if cycles[i] == 0:
                indices[i:] = indices[i+1:] + indices[i:i+1]
                cycles[i] = n - i
            else:
                j = cycles[i]
                indices[i], indices[-j] = indices[-j], indices[i]
                yield tuple(pool[i] for i in indices[:r])
                break
        else:
            return

关于python - 如何在Python中执行range()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49468732/

10-11 22:04
查看更多