Python:如何生成一个序列,每 m 个数字跳过 n 个数字

Python: How to generate a sequence skipping n numbers each m numbers

我目前正在学习 Python 并且我已经看到使用 list(range(start,stop,step)) 我们可以创建一个从 startstop-1 的数字序列,其中 step在连续数字之间。

但我不知道是否有办法实现数字序列,但每个 m 个数字跳过 n 个。

例如,如果我们有下一个数字列表:

list(range(0,20))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

如果我们想跳过 n=2 个数字,每个 m=3 个数字,那么结果将是:

[0, 1, 2, 5, 6, 7, 10, 11, 12, 15, 16, 17]

或者如果我们想跳过 n=3 个数字,每个 m=5 个数字,那么结果将是:

[0, 1, 2, 3, 4, 8, 9, 10, 11, 12, 16, 17, 18, 19]

有办法吗?提前致谢!

我不知道像 range() 这样简单的单行代码,但这应该可行:

n=3
m=5

numbers = []
for i in range(0, 20, n+m):
    for j in range(i, m+i):
        numbers.append(j)

呼叫号码输出:[0, 1, 2, 3, 4, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20]

这是一个每 m 个数字跳过 n 个的单行代码:

result = [j for i in range(0,20, n+m) for j in range(i, m+i)]
nums = range(0,20)
n = 2
m = 3

new_nums = []
while len(nums) != 0:
  if len(nums) < m:
    new_nums.extend(nums[:len(nums)])
    nums = []
  new_nums.extend(nums[:m])
  nums = nums[m:]
  nums = nums[n:]


print(new_nums)

这是一个详细的方法。

我的小贡献

m=3
n=2
a=list(range(0,20))
frames=[(a[i*(m+n):i*(m+n)+(m+n):][:n]) for i in a]
frame2=[]
b=[frame2.extend(i) for i in frames]
print(frame2)

[0, 1, 5, 6, 10, 11, 15, 16]