打印一个“计数器”(1 到 3),一行中有 5 个数字。并在下一行从上一行的最后一个数字开始
python 268
原文标题 :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)
回复
我来回复-
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年前 -
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年前 -
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年前