一行代码打印列表推导式的每一步结果

博客内容讲述了如何使用一行代码来替代原本的for循环,实现动态打印出0到9的平方列表。通过使用lambda函数和列表推导式,将原始代码的功能压缩到一行,展示了Python的简洁性和强大表达力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

将下面这个代码用一行代码实现:

l = []
for i in range(10):
    l.append(i**2)
    print(l)

这个代码的打印结果为:

[0]
[0, 1]
[0, 1, 4]
[0, 1, 4, 9]
[0, 1, 4, 9, 16]
[0, 1, 4, 9, 16, 25]
[0, 1, 4, 9, 16, 25, 36]
[0, 1, 4, 9, 16, 25, 36, 49]
[0, 1, 4, 9, 16, 25, 36, 49, 64]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

用一行代码替换为:

print('\n'.join(str(t) for t in [(lambda b : [a**2 for a in range(b+1)])(x) for x in range(10)]))

输出结果为:

[0]
[0, 1]
[0, 1, 4]
[0, 1, 4, 9]
[0, 1, 4, 9, 16]
[0, 1, 4, 9, 16, 25]
[0, 1, 4, 9, 16, 25, 36]
[0, 1, 4, 9, 16, 25, 36, 49]
[0, 1, 4, 9, 16, 25, 36, 49, 64]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

分析思路

  • 想办法得到一个大列表,这个大列表中包含若干个小列表,每个小列表是列表推导式的每一步结果。当得到这个大列表的时候就可以遍历它,将每一个子元素转换成字符串输出,而这一点是可以用列表推导式做到的。
  • 列表推导式是直接得到结果的,不能打印每一步结果,所以考虑用lambda函数。lambda函数中,冒号左边是参数,冒号右边是返回值。lambda函数可以直接括起来,后边跟着写小括号,里面写实参。
  • 此时这个lambda函数的功能和[i**2 for i in range(10)]是一样的。
  • 这时可以考虑for循环给他动态赋值
  • 而动态赋值的动作是可以写成列表推导式的
  • 这次生成的列表就是开始需要的那个大列表

实现思路

  • lambda a:b,lambda函数冒号左边的a是形参,冒号右边的b是返回结果。所以用lambda函数是可以实现[i**2 for i in range(10)]的。

    这样做:

    (lambda a : [i ** 2 for i in range(a + 1)])(10)
  • 需求是要得到0~9的每一步二次幂的结果,所以用for循环赋值。赋值之后将其写成列表推导式,得到的就是开始需要的那个大列表

    [(lambda a : [i ** 2 for i in range(a + 1)])(10) for x in range(10)]
  • 遍历这个列表,将每个元素转成字符串,用换行追加的方式输出

    print('\n'.join(str(t) for t in 大列表))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值