2016-12-27 91 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)}