[英]get a chunk of items every n items in list
說我有以下列表:
l = [4,3,1,5,3,5,8,11,10,4,12,2,1]
切片l
以獲取長度為n
塊,從而在塊之間保留k
項目的最有效方法是什么?
例如,如果n=2
且k=3
則結果應為:
[4,3,5,8,12,2]
使用列表理解:
[e for i in range(0, len(l), n+k) for e in l[i:i+n]]
# [4, 3, 5, 8, 12, 2]
一個numpy
解決方案是:
import numpy as np
idx = (np.arange(0, len(l), n+k)[:,None] + np.arange(n)).ravel()
np.array(l)[idx]
# array([ 4, 3, 5, 8, 12, 2])
我的觀點是列表理解,即使您需要使用兩個,因為否則它只會產生一個列表列表。
l = [4,3,1,5,3,5,8,11,10,4,12,2,1]
n = 2
k = 3
chunk_l = [y for x in [l[i:i+n] for i in range(0,len(l), n+k)] for y in x]
print(chunk_l)
#[4, 3, 5, 8, 12, 2]
一個可能的解決方案是
l = [4,3,1,5,3,5,8,11,10,4,12]
k,n=3,2
res=[]
while l:
res+=l[:n]
l=l[n+k:]
print(res)
可以通過pythonicizity對其進行重大優化。
以下是使用切片的另一種解決方案
l = np.array([4,3,1,5,3,5,8,11,10,4,12,2,1])
A = l[:][::5]
B = l[1:][::5]
final = np.insert(B, np.arange(len(A)), A)
# array([ 4, 3, 5, 8, 12, 2])
l[:][::5]
從第一個元素開始為您提供第5個元素, l[1:][::5]
從第二個元素開始為您提供第5個元素。 然后將兩者合並
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.