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实现拼接多张图片的方法
Dec 01 Python
Python脚本暴力破解栅栏密码
Oct 19 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
Python查看微信撤回消息代码
Jun 07 Python
python使用response.read()接收json数据的实例
Dec 19 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
微信公众号token验证失败解决方案
Jul 22 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python和js交互调用的方法
Jun 23 Python
Django使用echarts进行可视化展示的实践
Jun 10 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
图书管理程序(三)
2006/10/09 PHP
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
2016/01/05 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
js获取单选按钮的数据
2006/11/27 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
Python中特殊函数集锦
2015/07/27 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
python模拟实现斗地主发牌
2020/01/07 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
Notino法国:购买香水和化妆品
2019/04/15 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
五一家具促销方案
2014/01/10 职场文书
篮球比赛口号
2014/06/10 职场文书
承诺书样本
2014/08/30 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python