这两个代码中哪个更有效?
Which of these 2 codes is more efficient?
我是学习 python 和整体编程的新手,我想知道这两个代码中的哪一个对下一个问题更有效:
编写一个程序来删除现有列表中的重复项。
第一个代码是我在不使用另一个占用内存的变量(?)的情况下设法构建的代码,
我知道构建嵌套循环会占用大量内存,但这并没有什么不同,因为我使用了 "while" 循环,它仅用于删除数字。
- 我的代码:
List = [5,2,9,1,7,2,2,3,9]
for item in List:
while(List.count(item) >= 2):
List.remove(item)
print(List)
- 第二个代码:
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)
两者都很好,问题并没有说你不能将数据作为列表存储在另一个变量中,哪种代码总体上更有效?
绝对是第二个,原因有很多:
- 永远不要使用第一个。遍历列表并同时删除项目是不安全的。
- 从列表中删除一个项目是一项 O(n) 繁重的任务,因为您总是需要复制列表的一半。
因此,在 O 表示法中,您具有以下缩放行为:
- 首先:计算:O(n^2); Space:O(n),准确地说是 2*n
- 秒:计算:O(n),Space:O(n),准确地说是 3*n
我是学习 python 和整体编程的新手,我想知道这两个代码中的哪一个对下一个问题更有效:
编写一个程序来删除现有列表中的重复项。
第一个代码是我在不使用另一个占用内存的变量(?)的情况下设法构建的代码, 我知道构建嵌套循环会占用大量内存,但这并没有什么不同,因为我使用了 "while" 循环,它仅用于删除数字。
- 我的代码:
List = [5,2,9,1,7,2,2,3,9]
for item in List:
while(List.count(item) >= 2):
List.remove(item)
print(List)
- 第二个代码:
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)
两者都很好,问题并没有说你不能将数据作为列表存储在另一个变量中,哪种代码总体上更有效?
绝对是第二个,原因有很多:
- 永远不要使用第一个。遍历列表并同时删除项目是不安全的。
- 从列表中删除一个项目是一项 O(n) 繁重的任务,因为您总是需要复制列表的一半。
因此,在 O 表示法中,您具有以下缩放行为:
- 首先:计算:O(n^2); Space:O(n),准确地说是 2*n
- 秒:计算:O(n),Space:O(n),准确地说是 3*n