python  创建一个保留重复值的列表的补码


Posted in Python onOctober 15, 2018

给定列表a = [1,2,2,3],其子列表b = [1,2]以这样一种排序(a)==排序(b补码)的方式找到一个补全b的列表.在上面的例子中,补码将是[2,3]的列表.

使用列表解析是很诱人的:

complement = [x for x in a if x not in b]

或设置:

complement = list(set(a) - set(b))

然而,这两种方式都将返回complement = [3].

一个明显的做法是:

complement = a[:]
for element in b:
  complement.remove(element)

但是,这种感觉非常不满意,而且不是非常棒的.我错过了一个明智的成语吗?

正如下面所指出的那样,性能是O(n ^ 2)是否有更有效的方式?

只有更多的声明性和因此的Pythonic方式才能进入我的脑海,并提高大b(和a)的性能是使用某种减法计数器:

from collections import Counter
class DecrementCounter(Counter):
  def decrement(self,x):
    if self[x]:
      self[x] -= 1
      return True
    return False

现在我们可以使用列表解析:

b_count = DecrementCounter(b)
complement = [x for x in a if not b_count.decrement(x)]

这里我们跟踪b中的计数,对于我们查看的每个元素是否是b_count的一部分.如果确实如此,我们减少计数器并忽略该元素.否则我们将其添加到补全.请注意,只有当我们确信这样的补充存在时,这才有效.

构建补码后,可以检查补码是否存在:

not bool(+b_count)

如果这是False,那么这样的补码不能被构造(例如a = [1]和b = [1,3]).所以全面实施可能是:

b_count = DecrementCounter(b)
complement = [x for x in a if not b_count.decrement(x)]
if +b_count:
  raise ValueError('complement cannot be constructed')

如果字典查找在O(1)中运行(通常情况下,仅在极少数情况下为O(n)),则该算法运行在O(| a | | b |)中(因此,列表).而删除方法通常会在O(| a |×| b |)中运行.

总结

以上所述是小编给大家介绍的python  创建一个保留重复值的列表的补码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python写的Socks5协议代理服务器
Aug 06 Python
老生常谈Python进阶之装饰器
May 11 Python
有趣的python小程序分享
Dec 05 Python
用Python3创建httpServer的简单方法
Jun 04 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
Python subprocess库的使用详解
Oct 26 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
python实现LRU热点缓存及原理
Oct 29 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
python 美化输出信息的实例
Oct 15 #Python
python  Django中的apps.py的目的是什么
Oct 15 #Python
使用Python监视指定目录下文件变更的方法
Oct 15 #Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 #Python
彻彻底底地理解Python中的编码问题
Oct 15 #Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 #Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 #Python
You might like
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP折半(二分)查找算法实例分析
2018/05/12 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
node.js操作MongoDB的实例详解
2017/10/11 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
python下载图片实现方法(超简单)
2017/07/21 Python
Python生成器以及应用实例解析
2018/02/08 Python
python利用微信公众号实现报警功能
2018/06/10 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
Python 防止死锁的方法
2020/07/29 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
目标责任书范本
2014/04/16 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
股权转让协议书
2014/12/07 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
在职证明范本
2015/06/15 职场文书
大学生入党自传2015
2015/06/26 职场文书
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL