如何创建可容纳10个元素的空列表?
之后,我想在该列表中分配值。例如:
xs = list()
for i in range(0, 9):
xs[i] = i
但是,这会导致IndexError:list赋值索引超出范围。为什么?
编者按:
在Python中,列表没有设置容量,但无法分配给尚未存在的元素。这里的答案显示了创建一个列表的代码,其中包含10个稍后要替换的“伪”元素。然而,遇到这个问题的大多数初学者实际上只是想通过向列表中添加元素来构建列表。这应该使用.append方法来完成,尽管通常会有特定于问题的方法来更直接地创建列表。请参阅为什么此迭代列表增长代码会导致IndexError:列表分配索引超出范围?如何重复向列表中添加元素?详细信息。
有两种“快速”方法:
x = length_of_your_list
a = [None]*x
# or
a = [None for _ in xrange(x)]
看起来[None]*x更快:
>>> from timeit import timeit
>>> timeit("[None]*100",number=10000)
0.023542165756225586
>>> timeit("[None for _ in xrange(100)]",number=10000)
0.07616496086120605
但如果你对一个范围(例如[0,1,2,3,…,x-1])很满意,那么范围(x)可能是最快的:
>>> timeit("range(100)",number=10000)
0.012513160705566406
从技术上讲,它不是一个列表,但在功能上与列表相似,并且长度固定
from collections import deque
my_deque_size_10 = deque(maxlen=10)
如果它已满,即获得10个项目,则添加另一个项目会导致项目@index 0被丢弃。第五。。但也可以在任意方向上追加。用于say
统计数据的滚动平均值在列表上滑动窗口,直到与另一个deque对象匹配。
如果您需要一个列表,那么当列表满时,只需使用列表(deque对象)
有两种“快速”方法:
x = length_of_your_list
a = [None]*x
# or
a = [None for _ in xrange(x)]
看起来[None]*x更快:
>>> from timeit import timeit
>>> timeit("[None]*100",number=10000)
0.023542165756225586
>>> timeit("[None for _ in xrange(100)]",number=10000)
0.07616496086120605
但如果你对一个范围(例如[0,1,2,3,…,x-1])很满意,那么范围(x)可能是最快的:
>>> timeit("range(100)",number=10000)
0.012513160705566406
列表始终是“可迭代的”,您可以始终向其中添加新元素:
insert:list.insert(indexPosition,value)append:list.append(值)扩展:列表扩展(值)
在您的例子中,您实例化了一个长度为0的空列表。因此,当您尝试使用列表索引(i)向列表中添加任何值时,它指的是不存在的位置。因此,您得到了错误“IndexError:list赋值索引超出范围”。
您可以改为尝试:
s1 = list();
for i in range(0,9):
s1.append(i)
print (s1)
要创建一个大小为10的列表(比方说),可以先创建一个空数组,比如np.empty(10),然后使用arrayName.tolist()将其转换为列表。或者,也可以将它们链接起来。
**`np.empty(10).tolist()`**