优草派  >   Python

Python list如何去重?

孙慧敏            来源:优草派

### Python List如何去重?

Python list如何去重?

在Python中,去重是常见的操作之一。比如一个列表中可能包含了多个相同的元素,为了好处理,我们需要将其中的重复元素去掉,只保留一个。在这篇文章中,我们会学习3种不同的方法去重:

1. 使用set()函数

2. 使用循环和if语句

3. 使用列表推导式

同时,我们会对比一下这几种方法的效率和使用场景,让读者在对列表去重时,可以更加灵活、快捷的选择不同的方法。

#### 使用set()函数

Python内置的set()函数可以很方便的帮助我们去重,其实现方法为将列表转换成集合,由于集合本身不允许有重复元素,因此重复的元素在转换后会被自动去除。示例如下:

```

list_origin = [2,2,2,4,5,5,3,11]

list_new = list(set(list_origin))

print(list_new)

```

输出结果为:

```

[2, 3, 4, 5, 11]

```

使用set()函数去重简洁高效,但是它有个致命的缺点,那就是会破坏原始列表元素的顺序。如果我们在去重的同时也要保留元素的顺序,那么set()函数就不可行了。

#### 使用循环和if语句

这种方法的实现方式比较基础,其核心思路就是遍历原始列表,用if语句判断元素是否在新列表中出现过,如果没有,就添加到新的列表中。演示代码如下:

```

list_origin = [2,2,2,4,5,5,3,11]

list_new = []

for i in list_origin:

if i not in list_new:

list_new.append(i)

print(list_new)

```

该方法虽然使用了两重循环,其时间复杂度也比较高(O(n^2)),但是它能够保留元素的顺序,因此在一些特定的场景下仍然非常有用。

#### 使用列表推导式

列表推导式(List Comprehensions)是Python内置的一种快捷生成列表的方式,我们也可以用它来实现列表去重。其核心思路与上述方法类似,不过实现起来优雅高效得多。演示代码如下:

```

list_origin = [2,2,2,4,5,5,3,11]

list_new = []

[list_new.append(i) for i in list_origin if i not in list_new]

print(list_new)

```

该方法使用了列表推导式的写法,在循环的过程中加上了if语句的判断,相比于第二种方法,它更加简洁、高效,也能够保证去重后的元素顺序。

#### 效率和使用场景

三种去重方式各有优缺点,我们可以通过对比它们的效率和使用场景,来决定选用哪种方法。

首先,set()函数是三种方法中最快的。无论是在元素数量还是在时间效率上,都远高于其他两种方法。但是在需要保证元素的顺序时,就需要使用另外两种方法。

其次,使用循环和if语句对于小样本数据,效率并不比set()低多少。而且在适当的算法优化下,时间效率还可以进一步提升。但是对于大样本数据,这种方法就无法承受,因为它的时间复杂度太高了。

最后,列表推导式是一种更加Pythonic的方法,它简单优雅,也易于阅读和维护。在大部分情况下,它与set()函数处理速度不相上下,但是相比其他两种方法,对于大数据量有更好的表现。

综上所述,我们可以得出结论:对于小样本数据或需要保持原始元素顺序的场景,我们可以使用循环和if语句;对于大样本数据或不需要保持元素顺序的场景,我们可以使用set()函数或列表推导式。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行