如何创建可容纳10个元素的空列表?
所有列表都可以容纳任意数量的元素,只受可用内存的限制。列表中唯一重要的“大小”是其中当前元素的数量。
但是,这会导致IndexError:list赋值索引超出范围。为什么?
第一次通过循环时,i等于0。因此,我们尝试xs[0]=0。这不起作用,因为列表中当前有0个元素,因此0不是有效的索引。
我们不能使用索引来写入不存在的列表元素——我们只能覆盖现有的元素。相反,我们应该使用.append方法:
xs = list();
for i in range(0, 9):
xs.append(i)
您将注意到的下一个问题是,列表实际上只有9个元素,因为范围函数跳过了终点。(正如旁注:[]与list()一样有效,分号是不必要的,如果从0开始,范围只需要一个参数。)解决这些问题可以:
xs = []
for i in range(10):
xs.append(i)
然而,这仍然缺少标记-range并不是某种神奇的关键字,它是语言的一部分,例如def。
在2.x中,range是一个函数,它直接返回我们已经想要的列表:
xs = range(10) # 2.x specific!
# In 3.x, we don't get a list; we can do a lot of things with the
# result, but we can't e.g. append or replace elements.
在3.x中,range是一个设计巧妙的类,range(10)创建了一个实例。为了获得所需的列表,我们可以简单地将其输入到列表构造函数:
xs = list(range(10)) # correct in 3.x, redundant in 2.x