Python会定期从列表中删除项目

时间:2017-03-22 15:51:47

标签: python list elements

假设我有一个包含1000个元素的长列表,我想根据两个变量定期删除元素组。

因此对于my_list=[1,2,3,4...1000]a=5b=7,我会保留前5个元素,删除后7个元素,然后重复直到列表末尾。

该列表将如下所示:

my_list = [1,2,3,4,5,12,13,14,15,16...]

在使用它们之前我不知道a或b,也不知道列表的长度,所以我正在寻找一般的解决方案。

谢谢!

2 个答案:

答案 0 :(得分:3)

以下是使用enumerate并在moda之和上获取索引b的方法。过滤出mod小于a的值:

l = range(1, 30)
a, b = 5, 7
r = [x for i, x in enumerate(l) if i%(a+b) < a]
print(r)
# [1, 2, 3, 4, 5, 13, 14, 15, 16, 17, 25, 26, 27, 28, 29]

P.S.如果您要删除下一个7,则不应包括12。

答案 1 :(得分:1)

这是使用迭代器的不同方法:

import itertools as it

L = list(range(1000))
a, b = 5, 7

mask = it.chain(it.repeat(1, a), it.repeat(0, b))

Result = list(it.compress(L, it.cycle(mask)))

Documentation of the itertools standard module

这里很酷的是没有中间数据存储在内存中,所有结果都是即时生成的。

相关问题