2016-12-27 88 views
1

我試圖讓一對夫婦值;那對夫婦由ij組成;它們之間的加法可以是NN+1。我想要一個滿足條件的數字列表。 例如,如果N = 3,那麼我需要這樣的輸出:排序()不與列表解析工作

>>> [ [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] ] 

其中嵌套列表(couple)[2,1]是一個repetead元素。爲什麼排序不在這個代碼中工作?

+0

只是說不能取決於副作用。 –

+0

我不明白@CharlesDuffy,你說「沒有視副作用而定」是什麼意思;如果你可以在代碼中給出一些例子,它將是有用的。 – Alexis

+1

'list.sort()'將你的列表就地排序*作爲副作用*(在術語的函數編程意義上),而不是返回一個排序列表。 –

回答

4

方法.sort()是一個問題,但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)}