我想为列表的一部分分配一个值.除了以下之一之外,还有更好的解决方案吗?
也许性能最好,但有些丑陋:
>>> l=[0,1,2,3,4,5] >>> for i in range(2,len(l)): l[i] = None >>> l [0, 1, None, None, None, None]
简洁(但我不知道Python是否认识到不需要重新排列列表元素):
>>> l=[0,1,2,3,4,5] >>> l[2:] = [None]*(len(l)-2) >>> l [0, 1, None, None, None, None]
同样的警告如上:
>>> l=[0,1,2,3,4,5] >>> l[2:] = [None for _ in range(len(l)-2)] >>> l [0, 1, None, None, None, None]
不确定是否使用库来执行这样一个简单的任务是明智的:
>>> import itertools >>> l=[0,1,2,3,4,5] >>> l[2:] = itertools.repeat(None,len(l)-2) >>> l [0, 1, None, None, None, None]
我看到切片的赋值(对于for循环)的问题是Python可能会尝试准备"l"长度的变化.毕竟,通过插入更短/更长的切片来更改列表涉及复制列表AFAIK的所有元素(即所有引用).如果Python也在我的情况下这样做(虽然没有必要),操作变为O(n)而不是O(1)(假设我只是总是改变一些元素).