Python:如何生成一个序列,每 m 个数字跳过 n 个数字
Python: How to generate a sequence skipping n numbers each m numbers
我目前正在学习 Python 并且我已经看到使用 list(range(start,stop,step))
我们可以创建一个从 start
到 stop-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]
我目前正在学习 Python 并且我已经看到使用 list(range(start,stop,step))
我们可以创建一个从 start
到 stop-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]