[['{}*{}={}'.format(i,j,i*j) for j in range(1,i+1)] for i in range(1,10)]
输出:
[['1*1=1'], ['2*1=2', '2*2=4'], ['3*1=3', '3*2=6', '3*3=9'], ['4*1=4', '4*2=8', '4*3=12', '4*4=16'], ['5*1=5', '5*2=10', '5*3=15', '5*4=20', '5*5=25'], ['6*1=6', '6*2=12', '6*3=18', '6*4=24', '6*5=30', '6*6=36'], ['7*1=7', '7*2=14', '7*3=21', '7*4=28', '7*5=35', '7*6=42', '7*7=49'], ['8*1=8', '8*2=16', '8*3=24', '8*4=32', '8*5=40', '8*6=48', '8*7=56', '8*8=64'], ['9*1=9', '9*2=18', '9*3=27', '9*4=36', '9*5=45', '9*6=54', '9*7=63', '9*8=72', '9*9=81']]步骤二:行中每个公式之间用空格拼接
[' '.join(['{}*{}={}'.format(i,j,i*j) for j in range(1,i+1)]) for i in range(1,10)]
输出:
['1*1=1', '2*1=2 2*2=4', '3*1=3 3*2=6 3*3=9', '4*1=4 4*2=8 4*3=12 4*4=16', '5*1=5 5*2=10 5*3=15 5*4=20 5*5=25', '6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36', '7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49', '8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64', '9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81']步骤三:行与行之间用换行符拼接
'n'.join([' '.join(['{}*{}={}'.format(i,j,i*j) for j in range(1,i+1)]) for i in range(1,10)])
输出:
'1*1=1n2*1=2 2*2=4n3*1=3 3*2=6 3*3=9n4*1=4 4*2=8 4*3=12 4*4=16n5*1=5 5*2=10 5*3=15 5*4=20 5*5=25n6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36n7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49n8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64n9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81'最后print打印输出
print('n'.join([' '.join(['{}*{}={}'.format(i,j,i*j) for j in range(1,i+1)]) for i in range(1,10)]))
输出:
1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
思路过程:
重点在于第一步,怎么按行分组得到每行的公式呢?
如果你直接使用列表生成式嵌套两层for循环的话,会依次得到每个乘法公式:
['{}*{}={}'.format(i,j,i*j) for i in range(1,10) for j in range(1,i+1)]
输出:
['1*1=1', '2*1=2', '2*2=4', '3*1=3', '3*2=6', '3*3=9', '4*1=4', '4*2=8', '4*3=12', '4*4=16', '5*1=5', '5*2=10', '5*3=15', '5*4=20', '5*5=25', '6*1=6', '6*2=12', '6*3=18', '6*4=24', '6*5=30', '6*6=36', '7*1=7', '7*2=14', '7*3=21', '7*4=28', '7*5=35', '7*6=42', '7*7=49', '8*1=8', '8*2=16', '8*3=24', '8*4=32', '8*5=40', '8*6=48', '8*7=56', '8*8=64', '9*1=9', '9*2=18', '9*3=27', '9*4=36', '9*5=45', '9*6=54', '9*7=63', '9*8=72', '9*9=81']
解析:
但这没有进行分组,如何按行分组?
可以把每一行的公式都放到一个小列表里。
按行来生成每行的公式列表,那就需要再嵌套一个列表生成式。
通过外层循环来获取行数i,内层再根据行数i生成每个小列表,里面正好有i个公式。
主要知识点:
列表生成式、join拼接、格式化字符串



