Ami*_*mir 1 python performance list
我有列表列表,如:
[[0, 1, 2],
[3, 1],
[2, 0, 1],
[4, 3],
[1, 3, 4]]
Run Code Online (Sandbox Code Playgroud)
列表值介于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]]
Run Code Online (Sandbox Code Playgroud)
为此,我编写了以下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)
Run Code Online (Sandbox Code Playgroud)
但是对于大型数据集(列表),这需要永远.我想知道是否有更有效的方法/建议我可以用于这种情况?
运行in的每个检查(名单为O(n)操作)j-5嵌套循环(一个O(n×m的)操作)内减慢你的代码的性能-因为查找是缓慢和香草用于在Python循环是不便宜.
您可以简单地设置差异并添加5,然后使用结果扩展内部列表:
st = set(range(5))
for l in X1:
l.extend(sorted([x+5 for x in st.difference(l)]))
print(X1)
Run Code Online (Sandbox Code Playgroud)
如果你实际上不需要对你要追加的新项目进行排序,那么你会更快,因为内部列表无论如何都没有排序,因为排序会增加额外的O(nlogn)复杂度.
另外,对于在列表循环理解的运行速度比for循环香草更快,所以我可以说的嵌套的挂钟时间在这里的表现比原来好多了.
设定差异输出重复执行,list.__contains__而单个list.extend也输出重复执行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]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |