我想说
a[current] = value
而不是说
a.append(value)
因为我想表明当前值是值。前一个清单显示了这个更好。我来自C,所以我对python列表有点困惑。在C中我预先分配空间,因此在分配值之前,[current]将存在并包含垃圾。我可以在Python中做类似的事情吗?
答案 0 :(得分:5)
您可以执行类似
的操作[0] * 10
将导致
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但你的方法可能不会非常“pythonic”。如果切换到Python,你还应该考虑在python中思考。 ; - )
答案 1 :(得分:1)
您可以使用
分配长度为n
的列表
my_list = [None] * n
显然,列表将被初始化而不是包含垃圾。
尽管如此,请注意,列表理解通常可以替代包含list.append()
调用的循环。
答案 2 :(得分:1)
当我第一次使用Python时,我一直遇到这个问题。您可以执行“[0] * 10”之类的操作,但不够优雅,如果您尝试对列表列表执行相同操作,则会导致问题。
我终于通过实现大部分时间来解决这个问题,我只需要将问题重新制定成更加pythonic的东西。列表理解(如上所述)几乎总是正确的答案。如果要预先分配空间,这意味着您可能会迭代其他列表,执行某些操作,然后将新列表中的元素设置为该值:
newList = [op(e) for e in oldList]
你可以变得更加漂亮。例如,如果您不想要所有元素,则可以设置过滤器:
newList = [op(e) for e in oldList if e < 5]
只会将小于5的项目放入newList。
然而,有时列表理解并不是你想要的。例如,如果你正在进行数学编码,那么numpy就可以解决问题:
myVector = numpy.zeros(10)
将创建一个包含10个元素的数组。
答案 3 :(得分:0)
如果要在Python中创建一个初始化为零的n
元素列表(读取“preallocate”),请使用:
somelist = [0] * n
这是你想要的吗?
答案 4 :(得分:0)
如果您不喜欢append
,可以执行
a = [None]*10
for i in range(10):
a[i] = something()
答案 5 :(得分:0)
您可能也对python arrays感兴趣。
答案 6 :(得分:0)
我认为最近似的语法是:
a.insert(current, value)
但是如果current不是数组中的最后一个位置,insert将分配一些额外的空间并在当前位置之后移动所有内容。不知道这是否是理想的行为。以下代码就像一个追加:
a.insert(len(a), value)
答案 7 :(得分:0)
如果您要维护一个单独的current
变量来指示下一个项目的插入位置(也就是说,您的行a[current] = value
会紧跟current += 1
并且您希望你可以写a[current++] = value
),然后你用Python写C,应该停止。 : - )
否则,您可能希望使用您希望其包含的项目数预先分配列表,正如其他人所示。如果您想要一个自动扩展以填充缺失值的列表,即使列表只有50个项目,a[100] = value
也可以工作,这可以使用自定义{{1列表子类上的方法:
__setitem__()
答案 8 :(得分:0)
如果您想显示当前值是'value',为什么不为它使用变量呢?
a.append(value)
current_value = value