嵌套列表理解,python,模式打印

时间:2014-12-19 06:17:34

标签: python

我想使用嵌套列表理解打印下面的模式。我能够通过正常的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

4 个答案:

答案 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