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
我不知道我的代码有什么问题。
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
我不知道我的代码有什么问题。
>>> 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]
你很近。
但是,您不想将否定添加到集合中,而是要删除那些否定不在集合中的否定。像这样:
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)
,但我认为这种方式更具可读性。)