如何在Python中删除列表中y元素的x个实例

时间:2018-12-31 22:38:22

标签: python python-3.x list list-comprehension

我有一个列表,在该列表中,我有很多重复的值。这是列表的格式:

https://imgur.com/a/tj2ZwxG

所以我有一些字段,按此顺序:“ User_ID”“ Movie_ID”“ Rating”“ Time”

我想做的是,从第五次出现的“ User_ID”中删除,直到找到一个不同的“ User_ID”。例如:

让我们假设我有一个仅包含“ User_ID”(从1到196)的列表,如下所示:

1、1、1、1、1、1、1、2、2、2、2、2、2、2 ...

在这种情况下,我出现了6个数字1,出现了7个数字2。

因此,我将在第五次出现后从1中删除,直到找到第一个“ 2”为止。同样,对于2:在第五次出现之后,我将开始删除,直到找到一个新的数字,该数字将为“ 3”,依此类推。

所以,我将得到一个新列表,像这样:1,1,1,1,1,1,2,2,2,2,2 每个不同元素仅包含5个实例。

我知道我可以像这样访问所有“ User_ID”字段:list[index]["User_ID"]

有执行该功能的功能吗?或者,如果没有,有人可以帮助我创建一个吗?

感谢您的帮助!

我试图做的是这样的:

a = 0
b = 1
start = 0
position = 0

while(something that I don't know):
    while(list[a]['User_ID'] == list[b]['User_ID']): #iterate through the list, and I only advance to the next elements if the previous and next elements are the same
        a+=1
        b+=1
        position+=1 
    if(list[a]['User_ID'] != list[b]['User_ID']): #when I finally find a different element
        del new_list[start:start+position] #I delete from the start position, which is five untill the position before the different element.
        a+=1
        b+=1
        start+=5

3 个答案:

答案 0 :(得分:1)

l.append(i)

答案 1 :(得分:0)

我对您的[1,1,1,1,1]等列表感到很困惑,看起来您有字典或对象的列表。

如果您关心每个字段,则可以将其设为一个集合,然后返回列表: my_list = list(set(my_list))

如果它们是对象,则可以覆盖__eq__(self,other)__hash__(self),我认为您将能够使用相同的列表/集合/列表转换来删除重复项。

答案 2 :(得分:0)

您的输入似乎是list个实例中的dict个。您可以使用各种itertools以相同的User_ID键仅以空间和时间高效的方式保留5个字典:

from itertools import chain, groupby, islice
from operator import itemgetter

lst = [{'User_ID': 1, ...}, {'User_ID': 1, ...}, ..., {'User_ID': 2, ...}, ...]    

key = itemgetter('User_ID')
only5 = list(chain.from_iterable(islice(g, 5) for _, g in groupby(lst, key=key)))

这会将列表分为相同的User_ID块,然后将每个块中的第一个5放入新列表中。