我想从列表中删除项目,以便保留前n个项目,然后删除下一个2n项目。
对于n = 8,我想保留前8个,删除下16个并根据需要重复此操作:
a =范围(48)
我想成为
[0,1,2,3,4,5,6,7,24,25,26,27,28,29,30,31]
这是为了挑选出一天中的前8个小时,并且每小时运行一次功能。
我发现很难在搜索查询中对此进行短语,所以答案可能很简单,但我没有运气!
答案 0 :(得分:2)
您可以使用理解列表:
[ a[i] for i in range(len(a)) if (i % 24 < 8) ]
以上仅创建一个新列表。如果要编辑列表,必须从最后开始明确删除不需要的元素,以避免更改索引:
for i in range(len(a) - 1, 0, -1):
if i % 24 >= 8:
del a[i]
答案 1 :(得分:1)
AMD$ awk '/\*\*\* /{p=$0} {a[p]++} END{for(i in a) print i"\n"a[i]-1}' File
*** dev1
3
*** dev2
2
def hours(n):
items = [x for x in range(49)]
del items[n:n*3]
print(items)
根据您的新鲜程度,您可能很难理解此代码,因此我将尝试解释一下:
我们首先创建一个带有参数hours(8)
的函数,为了测试目的,我们将使用n
然后我们使用list comprehension生成所有数字(0, 48)然后使用the del statement删除不需要的元素,我们将从列表中的8
删除到n
元素。例如,如果将n*3
作为9传递,我们对n
语句的使用可以翻译为:del
。
希望这是有道理的。
答案 2 :(得分:0)
这应该很容易理解
a = range(48)
n=8
result=[]
while a:
result+= a[:n]
a=a[n*3:]
print result