2012-03-29 208 views
3

我有Python的list迭代是这样定义的:Python列表迭代

for i in range(5): 
    for j in range(5): 
     if i != j: 
      print i , j 

因此,对于每一个元素在我的定义的范围[0..5]我想每个元素我,也是所有其他不是我的元素。

此代码完全按照我的预期,但有没有更干净的方式做到这一点?

+0

你可以使用范围()只一次在两个循环之前作为第一级优化 – DhruvPathak 2012-03-29 08:52:34

+0

从效率的角度来看,这是完全可以使用的,除非您在紧密循环中调用它或显着增加'5',我不担心。从可读性的角度来看,这是完全可读的。 – MattH 2012-03-29 08:53:38

回答

10

使用itertools.permutations

import itertools as it 
for i, j in it.permutations(range(5), 2): 
    print i, j 
+1

但是,OP的代码很容易理解,不需要读者知道itertools; itertools会在您需要将这些尺寸缩放到更多尺寸或多次需要时发光。 – 2012-03-29 09:03:16

2

[(X,Y)在范围X(5)有效范围内的Y(5)如果X = Y!]

+1

请在答案中提供更多信息。推荐一些背景或后代的解释。 – Gray 2012-03-29 12:48:23