2016-12-27 6 views
1

私はいくつかの値を取得しようとしています。そのカップルはijによって形成されます。それらの間の加算はNまたはN+1となります。条件を満たす数字のリストが必要です。例えば N = 3であれば、私はこのような出力が必要です。これまでのsort()はリスト内包では機能しません

>>> [ [1,2], [2,2] ] 

私のコードは次のとおりです。

N = 3 
answer = [] 
answer = [(i,j) for i in range (1,N) for j in range(1,N) if [i,j].sort() not in answer and i+j == N or i+j == N+1 ] 
print(answer) 

が、私はこれを実行すると、私はこの出力を受け取る:

>>> [ [1,2] , [2,1], [2,2] ] 

ここで、ネストされたリスト(カップル)[2,1]はrepetead要素です。なぜこのコードでソートが機能していないのですか?

+0

副作用に応じて、単にnoと答えます。 –

+0

私は@CharlesDuffyを理解していませんが、あなたは "副作用によっては何も言わない"という意味は何ですか?あなたがコードでいくつかの例を挙げることができれば、それは役に立つでしょう。 – Alexis

+1

'list.sort()'は、並べ替えられたリストを返すのではなく、副作用*(用語の機能プログラミングの意味で)としてインプレース*をソートします。 –

答えて

4

inplace .sort()メソッドは1つの問題ですが、answerは空のリストであり、リストの理解が完了するまで更新されないため、通常のforループを使用する必要があります。要素が既にanswerにあるかどうかを確認するには、セットを使用します。

answer = set() 
values = set([N, N+1]) 
for i in range(1,N): 
    for j in range(1,N): 
     if i + j in values: 
      answer.add(tuple(sorted((i, j)))) 

answer 
# {(1, 2), (2, 2)} 
関連する問題