leizhenzi23 发表于 2024-4-11 07:17:31

求教大佬拆解下,99乘法表:使用列表推导式实现

# 小甲鱼:一行流,列表推导式
print('\n'.join([''.join(["%s * %s = %s" % (j,i,i*j)for j in range(1,i+1)]) for i in range(1,10)]))

大佬能拆解下这个是怎么实现的么,不太明白啊

FishC 发表于 2024-4-11 07:17:45

当我们使用列表推导式时,通常的格式是`[表达式 for 变量 in 列表]`。在这个例子中,我们希望生成一个有9行的列表,每行包含一系列乘法表达式。所以可以将列表推导式拆解为以下几个步骤:

1. 首先,我们需要一个循环变量来控制行数,这里使用变量`i`来代表行数,所以循环范围是`range(1,10)`,即从1到9。
2. 对于每一行,我们需要生成一系列乘法表达式。可以使用另外一个循环来控制列数,这里使用变量`j`来代表列数,所以循环范围是`range(1,10)`,即从1到9。
3. 接下来,我们需要生成每个乘法表达式。在这里,我们使用字符串拼接的方式将乘法表达式组合在一起,使用空格分隔开各个因数和结果。这里的表达式可以写作`str(i) + ' * ' + str(j) + ' = ' + str(i*j)`。注意,`str(i)`和`str(j)`用来将整数转换为字符串,以便拼接。
4. 最后,我们需要将每一行的乘法表达式合并成一个字符串,并使用换行符进行分割。可以使用`''.join()`来实现,其中在`join`函数中传入乘法表达式的列表。

综上所述,整个代码可以拆解为以下形式:

result = []# 用于存放每一行的乘法表达式

for i in range(1, 10):
    row = []# 用于存放当前行的乘法表达式
    for j in range(1, 10):
      expression = str(i) + ' * ' + str(j) + ' = ' + str(i * j)
      row.append(expression)# 将当前乘法表达式添加到当前行中
    result.append(''.join(row))# 将当前行的乘法表达式合并成一个字符串,并添加到结果列表中

print('\n'.join(result))# 使用换行符连接每一行的乘法表达式,并输出

希望这样可以更好地理解列表推导式的实现过程!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-4-11 09:32:13

result=[]
for i in range(1,10):
    tmplst=[]
    for j in range(1,i+1):
       tmplst.append("%s * %s = %s" % (j,i,i*j))
    result.append(" ".join(tmplst))   

#最终result里面的 就是下面这些东西
print(result)   
#['1 * 1 = 1', '1 * 2 = 2 2 * 2 = 4', '1 * 3 = 3 2 * 3 = 6 3 * 3 = 9',
# '1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16', '1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25',
# '1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36', '1 * 7 = 7 2 * 7 = 14
# 3 *7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49', '1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32
#5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64', '1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45
# 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81']

#最终再去除列表皮,就是目标输出
print('\n'.join(result))

leizhenzi23 发表于 2024-4-15 13:48:16

大佬能给这个一行拆一下么,到哪儿断开,我都有点懵,多谢了

wp231957 发表于 2024-4-16 08:47:02

本帖最后由 wp231957 于 2024-4-16 08:52 编辑

leizhenzi23 发表于 2024-4-15 13:48
大佬能给这个一行拆一下么,到哪儿断开,我都有点懵,多谢了

这个涉及到双循环,没办法一句一句的拆解
你可以看一下这个代码   
i=1
print(["%s * %s = %s" % (j,i,i*j)for j in range(1,i+1)])
i=2
print(["%s * %s = %s" % (j,i,i*j)for j in range(1,i+1)])
i=3
print(["%s * %s = %s" % (j,i,i*j)for j in range(1,i+1)])
i=4
print(["%s * %s = %s" % (j,i,i*j)for j in range(1,i+1)])
i=5
print(["%s * %s = %s" % (j,i,i*j)for j in range(1,i+1)])

'''
运行结果:
['1 * 1 = 1']
['1 * 2 = 2', '2 * 2 = 4']
['1 * 3 = 3', '2 * 3 = 6', '3 * 3 = 9']
['1 * 4 = 4', '2 * 4 = 8', '3 * 4 = 12', '4 * 4 = 16']
['1 * 5 = 5', '2 * 5 = 10', '3 * 5 = 15', '4 * 5 = 20', '5 * 5 = 25']
'''


print('\n'.join([''.join(***********) for i in range(1,10)]))
你把上面的语句扣走,你会发现代码是不是清晰多了,如果你再把那两个点JOIN去除是不是就发现 啥都没有了
这两个点JOIN也狠简单,一个是用回车换行串列表项,一个是用空格串列表项

leizhenzi23 发表于 2024-4-19 20:59:20

wp231957 发表于 2024-4-16 08:47
这个涉及到双循环,没办法一句一句的拆解
你可以看一下这个代码   



多谢大佬得解答{:10_275:}
页: [1]
查看完整版本: 求教大佬拆解下,99乘法表:使用列表推导式实现