如何生成整数的顺序子集



我有以下起始值和结束值:

start = 0
end = 54

我需要生成从startend的4个顺序整数的子集,每个子集之间的间隔为20。结果应该是这样的:

0, 1, 2, 3, 24, 25, 26, 27, 48, 49, 50, 51 

在这个例子中,我们得到了3个子集:

0, 1, 2, 3
24, 25, 26, 27
48, 49, 50, 51 

如何使用numpypandas

如果我做r = [i for i in range(0,54,4)],我得到[0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52]

这应该会得到你想要的:

j = 20
k = 4
result = [split for i in range(0,55, j+k) for split in range(i, k+i)]
print (result)

输出:

[0, 1, 2, 3, 24, 25, 26, 27, 48, 49, 50, 51]

也许是这样的:

r = [j for i in range(0, 54, 24) for j in range(i, i + 4)]
print(r)
[0, 1, 2, 3, 24, 25, 26, 27, 48, 49, 50, 51]

您可以使用numpy.arange,它返回一个ndarray对象,该对象包含给定范围内的等距值

import numpy as np
r = np.arange(0, 54, 4)
print(r)

结果

[0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52]

Numpy方法

可以使用np.arange生成步长值为20 + 4的数字,其中20表示每个间隔之间的空间,4表示每个顺序子阵列。

start = 0
end   = 54
out   = np.arange(0, 54, 24) # array([ 0, 24, 48]) These are the starting points
# for each subarray
step = np.tile(np.arange(4), (len(out), 1))
# [[0 1 2 3]
#  [0 1 2 3]
#  [0 1 2 3]]

res  = out[:, None] + step
# array([[ 0,  1,  2,  3],
#        [24, 25, 26, 27],
#        [48, 49, 50, 51]])

这可以用平面python完成:

rangeStart = 0
rangeStop = 54
setLen = 4
step = 20
stepTot = step + setLen
a = list( list(i+s for s in range(setLen)) for i in range(rangeStart,rangeStop,stepTot))

在这种情况下,您将在数组中获得作为子列表的子集。

我认为你不需要使用numpy或panda来做你想做的事。我用一个简单的while loop 实现了它

num = 0
end = 54
sequence = []
while num <= end:
sequence.append(num)
num += 1
if num%4 == 0: //If four numbers have been added
num += 20
//output: [0, 1, 2, 3, 24, 25, 26, 27, 48, 49, 50, 51]

最新更新