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

时间:2014-10-14 03:19:58

标签: python list function set

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

这个功能确实有效,但是我正在寻找如何让这个函数输出set,这样就没有重复了。

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

1 个答案:

答案 0 :(得分:1)

总结这两条评论,您只需用大括号替换括号:

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))

但是,不会订购返回的列表。如果要返回有序列表(按大小):

def pos_neg(a):
    return sorted({-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))

或者,如果您不想使用OrderedDict:

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))]