Python中如何将列表重复多次追加到目标列表得到指定嵌套结构
解决方法
你之前的写法出问题的核心原因是:
append()是将传入的整个对象作为单个元素添加到列表末尾,而不是将对象内部的元素逐个追加y*3是把y的元素展开重复三次,得到一维长列表;[y]*3是生成嵌套的二层列表,二者用append传入都会导致结构不符合要求
正确实现方式
方法1:用extend()逐个追加元素(推荐)
extend()会把可迭代对象里的每个元素逐个添加到列表末尾,配合生成器表达式即可实现需求:
x = [['a', 'b']] y = ['c', 'd', 'e'] # 子列表互相独立的写法(推荐,避免后续修改互相影响) x.extend(y.copy() for _ in range(3)) # 如果不需要子列表独立,也可以简化为 # x.extend([y]*3) print(x) # 输出:[['a', 'b'], ['c', 'd', 'e'], ['c', 'd', 'e'], ['c', 'd', 'e']]
方法2:用+=运算符(和extend等价)
x += [y.copy() for _ in range(3)]
方法3:循环三次调用append()
逻辑最直白,适合新手理解:
for _ in range(3): x.append(y.copy())
注意事项
如果直接使用y而不调用copy(),添加到x里的三个子列表会指向同一个内存地址,后续修改任意一个子列表的元素,其余两个也会同步变化,按需选择即可。
内容的提问来源于stack exchange,提问作者Vinod
相关产品推荐
相关产品推荐

