Python 返回列表的副本,其中每个值的一个实例被删除

Python 返回列表的副本,其中每个值的一个实例被删除,python,list,Python,List,我所拥有的只是删除重复的项目并对它们进行排序。我需要删除每个项目的一个实例,并返回一个包含项目的新列表。这就是我所拥有的: def rem(nlst): n = [] for x in nlst: if x not in n: n.append(x) n.sort() return n 这就是它应该做的: >>> rem([4]) [] >>> rem([4,4]) [4

我所拥有的只是删除重复的项目并对它们进行排序。我需要删除每个项目的一个实例,并返回一个包含项目的新列表。这就是我所拥有的:

def rem(nlst):
    n = []
    for x in nlst:
        if x not in n:
            n.append(x)
            n.sort()
    return n
这就是它应该做的:

>>> rem([4])
[]
>>> rem([4,4])
[4]
>>> rem([4, 1, 3, 2])
[]
>>> rem([2, 4, 2, 4, 4])
[2, 4, 4]

一个简单的实现是使用集合。计数器:

def rem(iterable):
    c = collections.Counter(iterable)
    for k in c:
        c[k] -= 1
    return sorted(c.elements())
在2.7之前的Python版本中,
collections.Counter
不可用。您可以使用集合来记录已看到的项目:

def rem(iterable):
   result = []
   seen = set()
   for x in iterable:
       if x in seen:
           result.append(x)
       else:
           seen.add(x)
   result.sort()
   return result

一个简单的实现是使用集合。计数器:

def rem(iterable):
    c = collections.Counter(iterable)
    for k in c:
        c[k] -= 1
    return sorted(c.elements())
在2.7之前的Python版本中,
collections.Counter
不可用。您可以使用集合来记录已看到的项目:

def rem(iterable):
   result = []
   seen = set()
   for x in iterable:
       if x in seen:
           result.append(x)
       else:
           seen.add(x)
   result.sort()
   return result

对代码稍加修改似乎就可以了。仅添加了一个变量来跟踪当前值,并且仅在您已经看到该值时才添加一个新变量:

def rem(nlist):
    n = []
    nlist.sort()
    cur = None
    for x in nlist:
        if x == cur:
            n.append( x )

        cur = x

    return n

~

对代码稍加修改似乎就可以了。仅添加了一个变量来跟踪当前值,并且仅在您已经看到该值时才添加一个新变量:

def rem(nlist):
    n = []
    nlist.sort()
    cur = None
    for x in nlist:
        if x == cur:
            n.append( x )

        cur = x

    return n

~

谢谢你,斯文,你的回答正好满足了我的需要,你的回答也相当快!谢谢你,斯文,你的回答正好满足了我的需要,你的回答也相当快!