LengXuan 发表于 2021-10-28 02:07:10

新人问个关于切片赋值的问题

l = list(range(10))
我想要:
l = * 5

这种方法在等号右边会创建一个新的list,当我的切片比较大的时候会有问题
使用list comperhension或者itertools.repeat也是相同的问题

直接使用循环挨个更新,那时间复杂度又变成了O(n)
python里有没有更优雅一点的写法来实现这个事情?

大马强 发表于 2021-10-28 07:26:55

当我的切片比较大的时候会有问题
你说的问题是啥

傻眼貓咪 发表于 2021-10-28 16:28:09

希望对你有帮助:(优雅赋值){:10_277:} arr = list(range(10))
arr = arr[:2] + *5 + arr
print(arr)

kogawananari 发表于 2021-10-28 22:23:23

比较大的时候不推荐使用列表 而是使用生成器函数(含有yield的函数) 或生成器表达式(就是列表表达式的中括号换成小括号)

kogawananari 发表于 2021-10-28 22:26:53

kogawananari 发表于 2021-10-28 22:23
比较大的时候不推荐使用列表 而是使用生成器函数(含有yield的函数) 或生成器表达式(就是列表表达式的中 ...

itertools.chain可以拼接不同的可迭代对象

kogawananari 发表于 2021-10-28 22:29:24

itertools.chain( range(0,2) ,itertools.repeat(100, 5) , range(6,10))岂不美哉
页: [1]
查看完整版本: 新人问个关于切片赋值的问题