我如何将一个集合合并到这个Python代码中,以便它可以像以前一样工作

我如何将一个集合合并到这个Python代码中,以便它可以像以前一样工作,python,list,function,set,Python,List,Function,Set,此代码输入数字列表,并仅输出列表中正负号的数字。例如,它输入列表(2,3,4,-2,-3),输出为(2,3,-2,-3) 此函数确实有效,但我正在寻找如何使此函数输出为集,以便没有重复项 def pos_neg(a): return [i for i in a if -i in a] 要总结这两条注释,您可以将括号替换为大括号: def pos_neg(a): return {i for i in a if -i in a} 或者,为了加快长列表的速度: def pos_neg(

此代码输入数字列表,并仅输出列表中正负号的数字。例如,它输入列表(2,3,4,-2,-3),输出为(2,3,-2,-3)

此函数确实有效,但我正在寻找如何使此函数输出为
,以便没有重复项

def pos_neg(a):
  return [i for i in a if -i in a]

要总结这两条注释,您可以将括号替换为大括号:

def pos_neg(a):
    return {i for i in a if -i in a}
或者,为了加快长列表的速度:

def pos_neg(a):
    return {-i for i in a}.intersection(a)
或者,如果要再次返回列表:

def pos_neg(a):
    return list({-i for i in a}.intersection(a))
但是,返回的列表将不会排序。如果要返回有序列表(按大小):

如果要返回保留原始顺序的列表,请执行以下操作:

from collections import OrderedDict

def pos_neg(a):
    s = set(a)
    return list(OrderedDict.fromkeys(i for i in a if -i in s))
或者,如果您不想使用OrderedICT:

def pos_neg(a):
    s = set(a)
    t = set()
    b = []
    for i in a:
        if -i in s and i not in t:
            t.add(i)
            b.append(i)
    return b
或者,如果要使用列表理解:

def pos_neg(a):
    s = set(a)
    t = set()
    return [i for i in a if -i in s and not (i in t or t.add(i))]

您可以在该列表周围编写
set()
。您甚至不需要该列表,您只需执行
set(i代表i…)
,这样可以节省不必要的列表分配和迭代。尽管实际上,通过
set(a)
a
转换为一个集合可能会更有效,这样你的
中是O(1)而不是O(n)。如果你真的想玩,你可以通过在输入列表中按索引位置对重复数据消除列表进行排序来维持输入顺序。谢谢。。有没有什么方法可以在函数中放入一个集合1.但是让函数的输出仍然是一个列表1.我添加了一些解决方案,可以将列表返回到答案中。
def pos_neg(a):
    s = set(a)
    t = set()
    return [i for i in a if -i in s and not (i in t or t.add(i))]