[英]Select every nth value from list and replace values between them
我在python中有一個列表,其中包含一些值:List = [0,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8, 9,...,n]我想做的是選擇第n個值,並用零填充它們之間的距離。 這樣我最終得到以下列表:結果= [0,0,0,0,0,5,0,0,0,0,0,0,0,0,5,0,0,0,0,.. 。,n]注意:並不總是5。
我已完成的工作:編寫類似於窗口函數的內容並遍歷列表。
def window(x):
window = []
for ii in range(len(x)):
mask = [0,1,2,3,None,5,6,7,8]
select = [x is None for x in mask]
center = list(itertools.compress(x[ii],select))
window.append(center)
for ii in range(0,4):
center.insert(0,"0")
center.append("0")
return window
該函數有效,但是有些在第一次迭代后如何停止,我不知道為什么。
您可以將第n個項目存儲在單獨的變量中,然后將整個列表分配給填充值,然后填充存儲的列表(這不會創建原始列表的副本):
import itertools as it
l = list(range(20))
tmp = l[::5]
l[:] = it.repeat(0, len(l))
l[::5] = tmp
如果可以復印,也可以使用以下方法:
l = list(range(20))
l = [0 if i % 5 else x for i, x in enumerate(l)]
您可以遍歷列表,如果索引+ 1不能除以N,則將該項目的值設置為0
data = list(range(1,30))
print(data)
n_param = 5
for i in range(len(data)):
if (i+1) % n_param:
data[i] = 0
print(data)
產量
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
[0, 0, 0, 0, 5, 0, 0, 0, 0, 10, 0, 0, 0, 0, 15, 0, 0, 0, 0, 20, 0, 0, 0, 0, 25, 0, 0, 0, 0]
您可以使用列表理解來執行此操作,其中x是您的輸入列表,n是您要替換的列表的索引
def window(x, n):
output = [n if (i+1)%n == 0 and i!=0 else 0 for i, item in enumerate(x)]
return output
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.