列表中的返回值也具有否定值

时间:2013-10-09 18:06:13

标签: python

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]。我只想打印具有否定对应的ex:3, -3, 4, -4

的值

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

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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和一组的否定,并返回交集。 (它可能会稍微快一点{-i for i in a}.intersection(a),但我认为这种方式更具可读性。)