0
def negated(a):
    a = set(a)
    for i in a:
        a.add(-i)

    return list(a)

如果a = [ 3, 4, 5, 6, 7, 8, -3, -4]. 我只想打印具有否定对应项的值:3, -3, 4, -4

我不知道我的代码有什么问题。

4

2 回答 2

4
>>> s = set(a)
>>> [item for item in a if -item in s]
[3, 4, -3, -4]

在您的代码中,您已将原始列表重新分配给一组,最好将其分配给不同的变量。

def negated(a):
    s = set(a)
    for item in a:
        if -item not in s:
            s.remove(item)
    return list(s)
... 
>>> negated(a)
[3, 4, -4, -3]
于 2013-10-09T18:07:15.797 回答
3

你很近。

但是,您不想将否定添加到集合中,而是要删除那些否定不在集合中的否定。像这样:

def negated(a):
    a = set(a)
    return [i for i in a if -i in a]

如果你想变得棘手:

def negated(a):
    return set(a) & {-i for i in a}

这只是生成一组 a 和一组 a 的否定,并返回交集。(它可能会稍微快一点{-i for i in a}.intersection(a),但我认为这种方式更具可读性。)

于 2013-10-09T18:09:14.040 回答