Python3仅用列表生成器实现字符串按尾序次数重复生成列表的问询
# 一行列表生成器实现需求,无任何生成器外的额外代码 res = [char * (len(s) - idx) for s in [input()] for idx, char in enumerate(s)]
问题1:列表生成器内部绑定input返回值的方法
不需要借助生成器外的变量,你可以利用列表生成器的多层for逻辑实现临时变量绑定:将input()的返回值封装为单元素可迭代对象(比如[input()]),第一层for仅迭代1次,即可将输入的字符串赋值给临时变量s,全程仅调用1次input(),所有逻辑都在生成器内部完成。
你之前的写法问题在于两次调用了input(),计算长度和后续取值的输入是两次独立输入,不符合需求。
问题2:适配需求的列表生成器循环逻辑
需求对应的循环逻辑可以拆解为两层:
- 外层:单次迭代绑定输入字符串到临时变量
s - 内层:遍历
s的每个字符和正向索引,通过len(s) - 正向索引计算得到「从末尾开始计数的序号」,将字符重复对应次数即可得到目标子串
该结构完全符合列表生成器的通用语法,两层for子句是列表生成器的标准嵌套语法,等效于你之前写的普通循环逻辑。
测试验证:输入abcd时,运行上述代码的输出为['aaaa', 'bbb', 'cc', 'd'],和示例完全一致。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

