sort()不适用于列表推导

时间:2016-12-27 00:59:38

标签: python list sorting

我想获得一些价值观;这对夫妇由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]是重复元素。为什么排序不能在这段代码中工作?

1 个答案:

答案 0 :(得分:4)

inplace .sort()方法是一个问题,但answer是空列表,并且在列表推导中没有更新,直到它完成,所以可能你还必须使用定期循环,如果您不想检查元素是否已在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)}