1

我已经弄清楚了接受一个列表并返回一个列表的代码,其中每个元素只出现一次。但我无法弄清楚我需要做什么才能消除没有负面对应部分的数字:

例如,如果列表具有数字 [1,-1,2,-2,3]。返回列表时,它将删除 3。

到目前为止我有

def one(a):
  conversion = set()
  conversion_add = conversion.add
  elim = [x for x in a if x not in conversion and not conversion_add(x)]

接下来我需要做什么?如果语句,以及我需要使用什么语法来比较正负,以便我可以删除多余的数字而没有负数?

非常感谢

4

2 回答 2

4

听起来很对:

src = set([1,-1,2,-2,3])
no_match = set(a for a in src if -a not in src)
match = set(a for a in src if -a in src)

结果:

>>> src = set([1,-1,2,-2,3])
>>> no_match = set(a for a in src if -a not in src)
>>> match = set(a for a in src if -a in src)
>>> no_match
set([3])
>>> match
set([1, 2, -1, -2])
于 2013-10-12T22:01:36.510 回答
1

您可以使用 来执行此操作filter,然后将结果列表转换为集合:

> x = [1, 2, 3, -2, -4, -1, 4]
> print filter(lambda elem: -elem in x, x)
[1, 2, -2, -4, -1, 4]
于 2013-10-12T22:03:44.647 回答