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
我不知道我的代码有什么问题。
答案 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)
,但我认为这种方式更具可读性。)