B站: 迷途小书童的Note;微信公众号: Dev_Club;个人微信:xituxiaoshutong100

Python列表去重的2种方法

Python进阶 迷途小书童 0评论

软硬件环境

  • windows 10 64bit
  • anaconda3 with python 3.7

视频看这里

此处是youtube的播放链接,需要科学上网。喜欢我的视频,请记得订阅我的频道,打开旁边的小铃铛,点赞并分享,感谢您的支持。

遍历法

这是最容易想到的方法,我们准备一个临时的列表变量tmp,然后开始遍历原始列表aList,如果tmp中不存在相同的元素,则将元素追加到tmp列表中,否则不追加。看下面的代码

(base) PS C:\Windows\system32> ipython
Python 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: aList = [1, 2, 3, 4, 3, 2, 1]

In [2]: tmp = []

In [3]: for item in aList:
   ...:     if not item in tmp:
   ...:         tmp.append(item)
   ...: print(tmp)
[1, 2, 3, 4]

In [4]:

这种方法直观易懂,可以保持原来列表的顺序,但是执行效率偏低

使用set去重

set是一个无序且无重复元素的集合,概念上相当于数学上的无序集,数据结构上相当于字典dict的键值。所以,将set作用于列表后,就能达到列表去重的目的。看下面的代码

(base) PS C:\Windows\system32> ipython                                         Python 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: aList = [4, 3, 2, 1, 2, 3, 4]

In [2]: bList = list(set(aList))

In [3]: bList
Out[3]: [1, 2, 3, 4]

In [4]:  

有一点,需要注意,使用set后生成的列表元素是无法保证其顺序的。如果想继续保持原来的顺序,可以通过列表中索引(index)的方法来实现,看下面的代码

(base) PS C:\Windows\system32> ipython                                                               Python 3.7.6 (default, Jan  8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: aList = [4, 3, 2, 1, 2, 3, 4]

In [2]: bList = list(set(aList))

In [3]: bList
Out[3]: [1, 2, 3, 4]

In [4]: bList.sort(key=aList.index)

In [5]: bList
Out[5]: [4, 3, 2, 1]

In [6]:   

与第一种方法相比,set的执行效率会提升不少

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址