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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
Python的面向对象思想分析
Jan 14 Python
python九九乘法表的实例
Sep 26 Python
windows下添加Python环境变量的方法汇总
May 14 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
Python 微信之获取好友昵称并制作wordcloud的实例
Feb 21 Python
python动态文本进度条的实例代码
Jan 22 Python
Python 日期与时间转换的方法
Aug 01 Python
python切片作为占位符使用实例讲解
Feb 17 Python
pytorch--之halfTensor的使用详解
May 24 Python
Matplotlib绘制混淆矩阵的实现
May 27 Python
Django框架模板用法详解
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
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
Laravel实现ApiToken认证请求
2019/10/14 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
初一学生评语大全
2014/04/24 职场文书
公司担保书范文
2014/05/21 职场文书
班风口号
2014/06/18 职场文书
社区志愿者活动方案
2014/08/18 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
业务员辞职信范文
2015/03/02 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL