Python 3.x 删除列表中存在的元素2次以上

Python 3.x 删除列表中存在的元素2次以上,python-3.x,list,conditional-statements,Python 3.x,List,Conditional Statements,我想创建一个新列表,其中每个元素最多可以出现2次。 我的代码: 我想要的输出: Removed: 2 [1, 2, 3, 3, 4, 5, 8, 8] 您需要计算列表中的唯一元素 def valid_element(elements): removed = 0 new_list = [] for i in elements: if i not in new_list: new_list.append(i) elif

我想创建一个新列表,其中每个元素最多可以出现2次。 我的代码:

我想要的输出:

Removed: 2
[1, 2, 3, 3, 4, 5, 8, 8]

您需要计算列表中的唯一元素

def valid_element(elements):
    removed = 0
    new_list = []
    for i in elements:
        if i not in new_list:
            new_list.append(i)
        elif i in new_list:
            repeat_count = new_list.count(i)
            if repeat_count < 2:
                new_list.append(i)
            else:    
                removed = i
    print(new_list)
    print('Removed:', removed)
valid_element([1, 2, 3, 3, 3, 3, 4, 5, 8, 8])

您的示例按排序顺序显示项目。如果副本彼此相邻,则可以执行以下操作:

from itertools import groupby, islice

alist = [1, 2, 3, 3, 3, 3, 4, 5, 8, 8]
result = [i for k, g in groupby(alist) for i in islice(g, 2)]
num_removed = len(alist) - len(result)
结果
包含

[1, 2, 3, 3, 4, 5, 8, 8]
如果您需要知道删除了多少,您可以这样做

from itertools import groupby, islice

alist = [1, 2, 3, 3, 3, 3, 4, 5, 8, 8]
result = [i for k, g in groupby(alist) for i in islice(g, 2)]
num_removed = len(alist) - len(result)
如果您的原始列表没有按排序顺序排列,并且您不介意重新排序,那么请执行此操作

result = [i for k, g in groupby(sorted(alist)) for i in islice(g, 2)]
最后,这里有一个保持秩序的版本

from collections import Counter
c = Counter()
result = [i for i in alist if c.update([i]) or c[i] <= 2]
从集合导入计数器
c=计数器()
如果c.update([i])或c[i],则结果=[i代表列表中的i]