0

検討

a = [1,2,3,4]

i = 0

j = 1

for i in range(len(a)):

       for j in range(len(a)):

          d = (a[i]-a[j])
          j = j + 1
          print i, j, d
       i = i + 1

出力

0 1 0

0 2 -1 

0 3 -2

0 4 -3

1 1 1

1 2 0

1 3 -1

1 4 -2

2 1 2

2 2 1

2 3 0

2 4 -1

3 1 3

3 2 2

3 3 1

3 4 0

配列を反復処理して、dに対してゼロ以外の数値のみを取得できるようにし、同じiとjを超えないようにします(例:i = 0、j=1またはi=1の場合、 j = 0)。これは、配列内のペアの数とそれに対応するdを調べている組み合わせ問題を実行するのと同じです。

4

3 に答える 3

1

d のゼロ以外の数値のみを取得できるように、配列を反復処理しようとしています

これが自宅での作業でない限り、問題に対して itertools.combinations を逆ソート リストで使用するか、 itertools.permutations を使用することをお勧めます。

>>> list((a,b) for a,b in itertools.permutations(a, 2) if a > b)
[(2, 1), (3, 1), (3, 2), (4, 1), (4, 2), (4, 3)]
>>> list(itertools.combinations(sorted(a, reverse = True), 2))
[(4, 3), (4, 2), (4, 1), (3, 2), (3, 1), (2, 1)]
于 2013-02-21T18:20:10.480 に答える
1

permutationsから使用するだけですitertools

import itertools
a = [1,2,3,4]
for permutation in itertools.permutation(a, 2):
    print permutation

出力

(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 3)
...
...

あなたができる距離も欲しいなら

a = [1,2,3,4]
for permutation in itertools.permutation(a, 2):
    print permutation, permutation[1] - permutation[0]

(1, 2) 1
(1, 3) 2
(1, 4) 3
(2, 1) -1
于 2013-02-21T18:17:14.010 に答える
0

これを試して:

a = [1,2,3,4]

i = 0

j = 1

for i in range(len(a)):

    for j in range(len(a)):

        d = (a[i]-a[j])
        j = j + 1
        if i != j and d != 0:
            print i, j, d
    i = i + 1

出力:

>>> 
0 2 -1
0 3 -2
0 4 -3
1 3 -1
1 4 -2
2 1 2
2 4 -1
3 1 3
3 2 2
于 2013-02-21T18:16:24.430 に答える