打印一个“计数器”(1 到 3),一行中有 5 个数字。并在下一行从上一行的最后一个数字开始

乘风 python 215

原文标题Print a “counter” (1 to 3) with 5 numbers in a line. And on the next line start on the last number of the previous line

我只想打印这样的东西:

1、2、3、1、2

3, 1, 2, 3, 1

2, 3, 1, 2, 3

并继续这样(不只是 3 或 4 行)

换句话说,我想在从 1 到 3 的一行中打印 5 个数字,当跳转到下一行时,它需要从最后一个打印的数字开始,但始终在 1 到 3 的范围内。我知道它真的很简单而且可能很明显,但我不知道怎么做哈哈

x = [1,2,3,1,2]
c = 0
for i in range(20): 
  print(x[c],x[c+1],x[c+2],x[c],x[c+1])

要么

x = 1
for i in range(20): 
  print(x,x+1,x+2,x,x+1)

并尝试了这个

x = 1
for i in range(10):
  for x in [1,2,3]:
    if x == 3:
      x = 1      
   print(x,x+1,x+2)

原文链接:https://stackoverflow.com//questions/71476360/print-a-counter-1-to-3-with-5-numbers-in-a-line-and-on-the-next-line-start

回复

我来回复
  • Mark的头像
    Mark 评论

    关于 python 最令人惊奇的事情之一是内置的特殊标准库和 includeitertools。

    这使得像这样的事情真正的内存效率和易于阅读。cycle()设置和迭代器,只是不断产生 1、2、3、1、2、3… 一遍又一遍。islice()从该迭代器中获取一定的数字:

    from itertools import cycle, islice
    
    nums = cycle([1,2,3])
    
    for r in range(3):
        print(*islice(nums, 5), sep=',')
    

    这打印:

    1,2,3,1,2
    3,1,2,3,1
    2,3,1,2,3
    

    这可能不是您想象的那样,但是学习 itertools 最终会节省大量时间,并且它是使 python 如此可读和使用起来如此愉快的好处之一。

    2年前 0条评论
  • Samwise的头像
    Samwise 评论

    使用range有更简洁(和更复杂)的方法,但这里是如何使用通过嵌套循环递增的单个计数器来做到这一点:

    >>> x = 0
    >>> for _ in range(3):
    ...     a = []
    ...     for _ in range(5):
    ...         x = x % 3 + 1
    ...         a.append(x)
    ...     print(", ".join(map(str, a)))
    ...
    1, 2, 3, 1, 2
    3, 1, 2, 3, 1
    2, 3, 1, 2, 3
    
    2年前 0条评论
  • Amadan的头像
    Amadan 评论

    有很多方法可以做到这一点。您可以生成整个序列,然后将其分解:

    seq = [1, 2, 3] * 5
    for subseq in [seq[i : i + 5] for i in range(0, len(seq), 5)]:
        print(', '.join(str(el) for el in subseq))
    

    或者您可以数数,并使用模数将所有内容都带入所需的范围,并在适当的时候中断:

    for i in range(15):
        print((i % 3) + 1, end=", " if (i + 1) % 5 else "\n")
    
    2年前 0条评论