在Python中,我有一个包含数千个数字的列表(负数和正数)。
我想要的是消除列表中出现的正数和负数。因此,我只想保留列表中出现的数字,无论是正数还是负数。
示例:list = (1, 2, 3, -1, -2, -5, 6, 7, -6)
应产生(3, -5, 7)
。
谢谢!
答案 0 :(得分:3)
您可以通过set
使用散列来确保平均情况下O(n)的复杂性。
from operator import neg
A = [1, 2, 3, -1, -2, -5, 6, 7, -6]
A_set = set(A)
exc = A_set & set(map(neg, A_set))
res = [i for i in A if i not in exc]
# [3, -5, 7]
答案 1 :(得分:1)
使用列表理解。
例如:
l = [1, 2, 3, -1, -2, -5, 6, 7, -6]
print([i for i in set(l) if -i not in l])
输出:
[3, -5, 7]
答案 2 :(得分:1)
仅使用设置:
from operator import neg
data = (1, 2, 3, -1, -2, -5, 6, 7, -6)
set_data = set(data)
set_neg = set(map(neg, set_data))
print(set_data & (set_data ^ set_neg))
给予:
{-5, 3, 7}
答案 3 :(得分:0)
我要做的是创建一个新列表来存储该列表。
尝试一下。
for i in list:
op = i * -1
if op not in list:
newlist.add(i)