可能重复:
python takes list and returns only if negative value also exists using set
我遇到另一个家庭作业问题。
通过使用一个集合,写一个取消的方法(a),取一个列表,a,作为 参数并返回一个仅包含元素x的列表 -x也在
中
他的例子表明输入是
[ - 6,8,3,3,2,-9,1,-3,2,4,4,-8,7,8,2,-2,-7,0,1, - 9, -3,-7,-3,-5,6,-3,6,-3,-10,-8]
,输出
[ - 6,8,7,3,2,-3,2,4,4,-8,7,8,2,-2,-7,0,-3,-7,-3 ,6, -3,6,-3,-8]
我能够在不使用带
的集合的情况下弄清楚如何做到这一点return [x for x in a if -x in a]
我在实现问题集时遇到问题。 有人可以给我采取的步骤,我应该如何解决这个问题......我不是在寻找完整的工作,但是看看你是如何做的也很好。
答案 0 :(得分:2)
您的代码适用于一组。您需要做的就是将列表更改为一组。
def negate(a) :
return [x for x in a if -x in a]
a = set()
a.add(1)
a.add(2)
a.add(-1)
print negate(a)
答案 1 :(得分:1)
以下是您需要实施的算法:
在您对列表中的元素进行迭代时,从列表中删除元素通常是一个坏主意,因此最好创建一个新的空列表并继续添加(或不添加)它
def filterNegs(L):
answer = []
for i in L:
if -1*i in L:
answer.append(i)
return answer
以下是对列表的理解:
return [i for i in a if -1*i in a]
但是当你这样做时会出现性能问题。检查元素是否在列表中是O(n)操作和集合中的O(1)。因此,最好先将L
转换为一组:
def filterNegs(L):
L = set(L)
answer = []
for i in L:
if -1*i in L:
answer.append(i)
return answer
以下是对列表的理解:
L = set(L)
return [i for i in a if -1*i in a]
希望这有帮助