鱼C论坛

 找回密码
 立即注册
查看: 160|回复: 5

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

[复制链接]
发表于 2024-4-11 07:17:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

大佬能拆解下这个是怎么实现的么,不太明白啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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`函数中传入乘法表达式的列表。

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

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

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

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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 09:32:13 | 显示全部楼层
  1. result=[]  
  2. for i in range(1,10):
  3.     tmplst=[]
  4.     for j in range(1,i+1):
  5.        tmplst.append("%s * %s = %s" % (j,i,i*j))
  6.     result.append(" ".join(tmplst))   

  7. #最终result里面的 就是下面这些东西
  8. print(result)   
  9. #['1 * 1 = 1', '1 * 2 = 2 2 * 2 = 4', '1 * 3 = 3 2 * 3 = 6 3 * 3 = 9',
  10. # '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',
  11. # '1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36', '1 * 7 = 7 2 * 7 = 14
  12. # 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
  13. #  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
  14. # 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81']

  15. #最终再去除列表皮,就是目标输出
  16. print('\n'.join(result))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-15 13:48:16 | 显示全部楼层
大佬能给这个一行拆一下么,到哪儿断开,我都有点懵,多谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 08:47:02 | 显示全部楼层
本帖最后由 wp231957 于 2024-4-16 08:52 编辑
leizhenzi23 发表于 2024-4-15 13:48
大佬能给这个一行拆一下么,到哪儿断开,我都有点懵,多谢了


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

  11. '''
  12. 运行结果:
  13. ['1 * 1 = 1']
  14. ['1 * 2 = 2', '2 * 2 = 4']
  15. ['1 * 3 = 3', '2 * 3 = 6', '3 * 3 = 9']
  16. ['1 * 4 = 4', '2 * 4 = 8', '3 * 4 = 12', '4 * 4 = 16']
  17. ['1 * 5 = 5', '2 * 5 = 10', '3 * 5 = 15', '4 * 5 = 20', '5 * 5 = 25']
  18. '''
复制代码



print('\n'.join(['  '.join(***********) for i in range(1,10)]))
你把上面的语句扣走,你会发现代码是不是清晰多了,如果你再把那两个点JOIN去除  是不是就发现 啥都没有了
这两个点JOIN也狠简单,一个是用回车换行串列表项,一个是用空格串列表项
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-19 20:59:20 | 显示全部楼层
wp231957 发表于 2024-4-16 08:47
这个涉及到双循环,没办法一句一句的拆解
你可以看一下  这个代码   

多谢大佬得解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 21:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表