这两个代码中哪个更有效?

时间:2019-06-08 19:45:29

标签: python-3.x performance memory-efficient

我是学习python和整体编程的新手,我想知道这两个代码中的哪一个对下一个问题更有效:

编写程序以删除现有列表中的重复项。

第一个代码是我设法构建的代码,没有使用占用内存(?)的另一个变量, 我知道构建一个嵌套循环会占用大量内存,但这没什么不同,因为我使用了“ while”循环,并且该循环仅用于删除数字。

  1. 我的代码:
List = [5,2,9,1,7,2,2,3,9]
for item in List:
    while(List.count(item) >= 2):
        List.remove(item)
print(List)
  1. 第二个代码:
List = [5,2,9,1,7,2,2,3,9]
New_List = []
for item in List:
    if item not in New_List:
       New_List.append(item)
print(New_List)

两者都能正常工作,问题不在于您不能将数据存储在List中的另一个变量中,哪个代码总体上效率更高?

1 个答案:

答案 0 :(得分:1)

绝对是第二个,出于多种原因:

  • 永远不要使用第一个。遍历列表并同时删除项目是不安全的。
  • 从列表中删除项目是一项艰巨的任务,因为您始终需要复制列表的一半。

因此,用O表示法,您具有以下缩放行为:

  • 首先:计算:O(n ^ 2);空格:O(n),精确为2 * n
  • second:计算:O(n),空间:O(n),精确到3 * n