将数字添加到列表的开头

时间:2018-09-13 11:48:41

标签: python-3.x

我有一个列表列表,比如X,看起来像这样

X_train = [[4,3,1,5], [3,1,6,2], [5,0,49,4], ... , [3,57,3,3]]

我写了这段代码

for x in range(0,len(X_train)):
    X_train[x].insert(0, x+1)

对于X中的每个列表,此代码将列表的索引值+ 1插入到列表的开头。也就是说,运行

for x in range(0,len(X_train)):
    X_train[x].insert(0, x+1)
print(X)

将产生以下输出

[[1,4,1,5],[2,3,1,6,2],[3,5,0,49,4],...,[n,3,57,3,3]]

其中n是X中的列表数。

问题:有更快的方法吗?我希望能够对非常大的列表执行此操作,例如列出数百万个子列表(如果可能)。

2 个答案:

答案 0 :(得分:1)

这在我的测试中更快:

X = [[n, *l] for n, l in enumerate(X, 1)]

答案 1 :(得分:0)

据我所知,Python中的标准insert方法的时间复杂度为O(n)。给定您当前的实现,您的算法的时间复杂度为O(mxn),其中m是子列表的数量,n是子列表中的元素的数量(我在这里假定子列表元素的数量始终相同)。

您可以使用blist代替标准列表,该列表的插入时间复杂度为O(log n)。这意味着总时间减少到O(m x log n)。不过,这并不是很大的进步。