2012-03-29 212 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