从列表中删除多次出现的整数

时间:2018-03-29 19:33:53

标签: python list

所以我有一个问题,我需要删除列表中出现n次以上的整数。这给了我一个错误,删除列表中不存在(x)。救命啊!

def answer1(data, n):
    for i in range(len(data)):
        item = 0
        if data.count(i) > n:
            item = i
            for k in range(len(data)):
                data.remove(item)
    print(data)

data = [1, 2, 3, 1, 1, 2, 2, 3, 4 ,5]
answer1(data, 2)

1 个答案:

答案 0 :(得分:2)

您的代码无效,因为您是removing items from your list while iterating on it。这缩短了列表,但迭代它的循环不知道(因为它的内部索引计数器)

我会使用collections.Counter来计算事件(良好的性能,而不是在每次迭代时扫描列表的count)然后使用列表理解过滤列表(作为奖励,原始输入未被修改)

import collections
def answer1(data, n):
   c = collections.Counter(data)
   return [x for x in data if c[x]<n]

data = [1, 2, 3, 1, 1, 2, 2, 3, 4 ,5]
a = answer1(data, 2)
print(a)

结果:

[4, 5]

(并保留初始订单)