2014-03-27 239 views
0

有没有办法在for循环中创建两个范围。我必须检查让对方说10个数组,但如果array1被选中,它不应该检查自己。 如果选择array1,则应使用arrays2-10检查array1。如果选择第二个,则应该使用array1和array3-10进行检查。停止循环Python

我发现一个链函数,但它似乎并没有在我的情况下正常工作,或者我做错了什么。

for i in range (1,11): 
    test_array is picked 
    for j in chain(range(1,i),range(i+1,11)): 
     does the check between test_array and all the other arrays Excluding the one picked as test_array 

for i in range(1,11): 
    pick test_array 
     for j in range (1,11): 
      if (j==i): 
       continue 
      .... 

根据测试这个和平比较阵列1与自身 上面的代码适用于2 for循环,但我有嵌套超过3个,并继续它去一路下来,这不是我想要 谢谢

找到我一直在寻找的答案:

for i in range(1,11): 
    do something. 
    for j in range(1,i) + range((i+1),11): 
     do something 
+0

目前尚不清楚究竟你正在寻找因为请提供一些例子。 –

+0

我想做循环,从循环中排除某些数字。例如,如果选择2,它应该像这样(1,3,4,5,6,7,8,9,10)等等,希望更清楚 – user3462014

+0

为什么不加'if j == i:继续'而不是? –

回答

0

使用itertools.combinations()

import itertools 
arrays = [[x] for x in 'abcd'] 
# [['a'], ['b'], ['c'], ['d']] 

for pair in itertools.combinations(arrays, 2): 
    print pair # or compare, or whatever you want to do with this pair 
0

你可以在这里使用itertools.permutations

import itertools as IT 
from math import factorial 

lists = [[1, 2], [3,4], [4,5], [5,6]] 
n = len(lists) 
for c in IT.islice(IT.permutations(lists, n), 0, None, factorial(n-1)): 
    current = c[0] 
    rest = c[1:] 
    print current, rest 

输出:

[1, 2] ([3, 4], [4, 5], [5, 6]) 
[3, 4] ([1, 2], [4, 5], [5, 6]) 
[4, 5] ([1, 2], [3, 4], [5, 6]) 
[5, 6] ([1, 2], [3, 4], [4, 5]) 

并采用另一种方式切片:

lists = [[1, 2], [3,4], [4,5], [5,6]] 
n = len(lists) 
for i, item in enumerate(lists): 
    rest = lists[:i] + lists[i+1:] 
    print item, rest