我有一个列表列表,比如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中的列表数。
问题:有更快的方法吗?我希望能够对非常大的列表执行此操作,例如列出数百万个子列表(如果可能)。
答案 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)。不过,这并不是很大的进步。