Python中列表的逐步子集设置
我当前的解决方案如下所示:Python中列表的逐步子集设置,python,Python,我当前的解决方案如下所示: import numpy as np chunksize = 10 l = list(np.arange(0,99)) while len(l) > chunksize: l_subset = l l_subset = l_subset[0:chunksize] l.pop(0) print(l_subset) 这看起来不是一个非常有效的解决方案,因为.pop需要遍历列表。有什么快速方法可以做到这一点?您可以使用 del l
import numpy as np
chunksize = 10
l = list(np.arange(0,99))
while len(l) > chunksize:
l_subset = l
l_subset = l_subset[0:chunksize]
l.pop(0)
print(l_subset)
这看起来不是一个非常有效的解决方案,因为.pop需要遍历列表。有什么快速方法可以做到这一点?您可以使用
del l[0]
这将只删除索引为零的项而不返回它。使用numpy是我找到的最快的解决方案:
import numpy as np
import time
chunksize = 10
arr = np.arange(0,99999)
l = list(arr)
start = time.time()
while len(l) > chunksize:
l_subset = l
l_subset = l_subset[0:chunksize]
l.pop(0)
runTime = time.time()-start
print(runTime) #0.8397529125213623s
l = list(arr)
start = time.time()
while len(l) > chunksize:
l_subset = l
l_subset = l_subset[0:chunksize]
del l[0]
runTime = time.time()-start
print(runTime) #0.879807710647583s
start = time.time()
lower = 0
upper = chunksize
n_subset = int(len(arr)/chunksize)
for i in range(n_subset):
arr[lower:upper]
lower = lower + 1
upper = upper + 1
runTime = time.time()-start
print(runTime) # 0.002997159957885742s
你能解释一下你想做什么吗?顺便说一句,行
l_subset=l
是不必要的,可以是l_subset=l[0:chunksize]
您到底想实现什么?你为什么要先把l
复制到l_子集
,然后立即用子集替换它,而不是l_子集=l[0:chunksize]
?你的循环实际上不就是做l[-chunksize:][/code>?