我想使用嵌套列表理解打印下面的模式。我能够通过正常的for循环来实现这一点。
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
#
for i in range (1,8):
k=0
for j in range (1,i+1):
k=k+i
print k,
print
输出:
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
答案 0 :(得分:3)
你走了:
pattern = [[j*i for j in range(1,i+1)] for i in range(1,8)]
print ("\n".join(" ".join(map(str, line)) for line in pattern))
第一行将创建包含模式的列表(2d),第二行将以适当的格式打印列表。如果您使用python 2
,请进行适当的更改。
答案 1 :(得分:2)
在每种情况下,列表推导都不能直接替代循环。
当您想要存储结果数据结构以供以后使用时,您使用列表推导 - 它占用内存中的空间等。由于您只打印数据,列表推导不会带来任何重大优势,并且可能实际上使您的代码更难以阅读和维护。
由于其他人提出了列表理解解决方案,我也会提供帮助,并指出在python 2中,您可以通过在文件的开头添加以下内容来将print作为函数进行打印:
from __future__ import print_function
答案 2 :(得分:1)
这将有效:
print("\n".join(" ".join(str(i*k) for k in range(1, i+1)) for i in range(1,8)))
打印出来:
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
答案 3 :(得分:0)
正如@abought所说,你不想要嵌套列表理解。一次打印一行,并保存自己在不需要的时候将大字符串存储在内存中。
>>> for i in range(1, 8):
print ' '.join(map(str, range(i, i*i+1, i)))
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
以下是另一个@ abought的建议(print_function
)将如何实施:
>>> from __future__ import print_function
>>> for i in range(1, 8):
print(*range(i, i*i+1, i), sep=' ')
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49