Python中如何在创建列表时嵌入生成器输出且不产生嵌套列表?
在Python中直接将生成器输出嵌入列表(不嵌套)
要实现将生成器的输出直接加入列表且不产生嵌套或生成器对象,有两种简洁的方法:
方法1:使用*操作符解包生成器
利用Python的可迭代对象解包语法,用*将生成器的元素直接展开到列表中:
x = 5 expected_list = [3, 0, 0, 0, 0, 0, 3] result_list = [3, *(0 for i in range(x)), 3] print(result_list) # 输出: [3, 0, 0, 0, 0, 0, 3]
方法2:列表拼接
先通过列表推导式生成包含重复0的子列表,再与前后的单元素列表拼接:
x = 5 expected_list = [3, 0, 0, 0, 0, 0, 3] result_list = [3] + [0 for i in range(x)] + [3] print(result_list) # 输出: [3, 0, 0, 0, 0, 0, 3]
错误原因说明
- 最初的代码
[3, 0 for i in range(x), 3]触发语法错误,因为列表内部不能直接放置未被处理的推导式,Python无法识别这种写法。 - 给推导式加括号后
(0 for i in range(x))会创建一个生成器对象,这个对象会被当作列表的单个元素存入,因此得到包含生成器的列表,而非展开的元素。
内容的提问来源于stack exchange,提问作者user17882893
相关产品推荐
相关产品推荐

