Skip to main content
 首页 » 编程设计

python之在 Python 中向列表添加额外元素的有效方法

2025年05月04日13emanlee

我有如下列表:

[[0, 1, 2],  
 [3, 1],  
 [2, 0, 1],  
 [4, 3],  
 [1, 3, 4]] 

列表值介于 0 和 5 之间。 现在我想要 5+(每个列表中不存在的低于 5 的数字)。 例如,在第一个列表中我们有 0,1,2 而我们没有 3, 4 所以我们想添加 5+3=8 和 5+4=9 所以最终他的新列表应该有 0,1,2 ,8,9。 最终输出应该是:

[[0, 1, 2, 8, 9], 
 [3, 1, 5, 7, 9], 
 [2, 0, 1, 8, 9], 
 [4, 3, 5, 6, 7], 
 [1, 3, 4, 5, 7]] 

为此,我编写了以下 python 代码:

k = -1 
for i in X1: 
    k = k + 1 
    for j in range(5, 10):         
        if j - 5 not in i: 
            X[k].append(j) 

然而,对于大型数据集(列表),这需要永远。我想知道是否有任何更有效的方法/建议可以用于这种情况?

请您参考如下方法:

在嵌套循环(O(nxm) 操作)中为每个 j-5 运行 in 检查(列表的 O(n) 操作)会减慢速度代码的性能 - 因为查找很慢,而且 Python 中的普通 for 循环并不便宜。

您可以简单地获取集合差异并添加 5,然后使用结果扩展内部列表:

st = set(range(5))  
for l in X1: 
    l.extend(sorted([x+5 for x in st.difference(l)])) 
print(X1) 

如果您实际上不需要对要追加的新项目进行排序,您的速度会快得多,因为内部列表无论如何都不会排序,因为排序会带来额外的 O(nlogn) 复杂性。

此外,列表理解中的 for 循环比普通的 for 循环运行得更快,所以我可以说这里嵌套的 wall time 性能比原来的要好得多。

set difference 优于 repeatedlist.__contains__ 而单个 list.extend 也优于 repeated list.append。


[[0, 1, 2, 8, 9],  
 [3, 1, 5, 7, 9],  
 [2, 0, 1, 8, 9],  
 [4, 3, 5, 6, 7],  
 [1, 3, 4, 5, 7]]