【问题标题】:Python: How to generate a sequence skipping n numbers each m numbersPython:如何生成一个序列,每个 m 个数字跳过 n 个数字
【发布时间】:2021-01-13 09:24:16
【问题描述】:

我目前正在学习 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]

我有办法吗?提前致谢!

【问题讨论】:

  • 是的,当然有可能:您只需编写代码。

标签: python range sequence


【解决方案1】:

这是一个单行,每 m 个数字跳过 n 个:

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

【讨论】:

  • 感谢您的帮助,很好的回答:)。只是一个小的旁注,因为对于 mn 的某些组合(例如 n=3m=6),可能会添加 >= 20 的数字。只需在末尾添加条件[j for i in range(0,20, n+m) for j in range(i, m+i) if j<20] 即可解决此问题
  • @JavierTG 我喜欢!谢谢。
【解决方案2】:
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)

这是一个详细的方法。

【讨论】:

    【解决方案3】:

    我的小贡献

    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]
    

    【讨论】:

    • 作品也很完美。但它只需要将m 替换为n
    【解决方案4】:

    我不知道像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]

    【讨论】:

    • 这根本行不通。请仔细检查结果!
    • 我刚刚对其进行了编辑以使其正常工作。这只是一个小错误。 n+i 必须是 m+i。
    • 感谢您的帮助 :) (+1)。我以前没有检查过,但它也像 pakpe 的回答一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2021-12-04
    • 2018-07-16
    相关资源
    最近更新 更多