python中列表去重有哪几种方法,python中去除列表重复值用什么-

  python中列表去重有哪几种方法,python中去除列表重复值用什么?

  在开发中,重复列表是非常常见的需求,重复列表也是Python中常见的处理方法。list作为Python中最常用的数据结构,负责了Python中大部分的数据存储任务,但是Python本身并不满足相异度,也就是说有重复的可能,所以需要去掉这些重复的值。那么,当Python列表被重复删除时,你会怎么做呢?有许多方法可以消除列表的重复。这里有四种方法,并对它们的性能进行了比较。

  我们先做一些简单的数据,生成100万个从0到99的随机数:

  fromrandomimportrandrange

  DUPLICATES=[rand range(100)for _ in range(1000000)]

  接下来,尝试这4种重复数据消除方法中最简单直观的方法:

  1.创建一个新数组,遍历原始数组,如果值不在新数组中,则将其添加到新数组中。

  #第一种方式

  defeasy_way():

  唯一=[]

  前元素副本:

  ifelementnotinunique:

  唯一.追加(元素)

  return唯一

  输入ipython并使用timeit计算其重复数据消除时间:

  % timeiteasy _ way()

  # 1.16秒137米循环(7次运行的平均标准偏差,1次循环)

  平均花费的时间大约是1.16秒,但是在这个例子中,我们使用一个数组作为存储对象。事实上,如果我们换成一个集合来存储经过重复数据消除的结果,性能会快得多:

  defeasy_way():

  unique=set()

  前元素副本:

  ifelementnotinunique:

  unique.add(元素)

  return唯一

  % timeiteasy _ way()

  # 48.4毫秒11.6毫秒每循环(7次运行的平均标准偏差,10次循环)

  平均耗时约48毫秒,提升明显。这是因为集合和数组的内部数据结构完全不同。集合使用的是哈希表,所以速度会比列表快很多,但是缺点是无序。

  让我们来看看第二种方式:

  2.直接对数组进行集合变换,然后返回数组:

  #减肥的第二种方法

  deffast_way()

  returnlist(集合(重复项))

  耗时:

  %timeitfast_way()

  # 14.2毫秒1.73毫秒循环(7次运行的平均标准偏差,100次循环)

  平均需要14毫秒。这种重复数据消除方式是最快的,但如前所述,该集合是无序的。当你把一个数组变成一个集合,然后变成一个列表,你就失去了原来列表的顺序。

  如果现在需要保持原来的数组顺序,那么这种方法是不可取的。我该怎么办?

  3.保持重复数据消除的原始阵列顺序。

  使用dict.fromkeys()函数,您可以保持原始数组的顺序并删除重复的数组:

  defsave_order():

  return list(dict . from keys(DUPLICATES))

  当然,这比简单地使用集合进行重复数据消除需要的时间要长一些:

  %timeitsave_order()

  # 39.5毫秒8.66毫秒每循环(7次运行的平均标准偏差,10次循环)

  平均用时39.5毫秒,我觉得可以接受。毕竟保留了原数组的顺序。

  但是只有Python3.6及以上版本支持dict.fromkeys()。

  如果你是3.6以下的Python3.6版本,那么你可能要考虑第四种方式。

  4.Python 3.6下面的列表保留了重复数据删除的顺序。

  在Python3.6下,fromkeys函数实际上是存在的,只不过它是由集合提供的:

  fromcollectionsimportOrderedDict

  defsave_order_below_py36():

  return list(ordered dict . from keys(DUPLICATES))

  耗时:

  %timeitsave_order_below_py36()

  # 71.8毫秒16.9秒循环(7次运行的平均标准偏差,10次循环)

  平均耗时约72毫秒,比Python3.6内置的dict.fromkeys()慢,因为OrderedDict是纯Python实现的。

  以上是四种Python列表去重方法。通过耗时的对比,他们的表现一目了然。希望以上方法对你学习Python有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: