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 BeautifulSoup使用方法详解
Nov 21 Python
Python引用模块和查找模块路径
Mar 17 Python
利用Python实现图书超期提醒
Aug 02 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
解决Mac下使用python的坑
Aug 13 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
python保留小数位的三种实现方法
Jan 07 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 Python
python中pandas对多列进行分组统计的实现
Jun 18 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实现计算百度地图坐标之间距离的方法
2016/05/05 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
Python 代码性能优化技巧分享
2012/08/07 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
基于Python闭包及其作用域详解
2017/08/28 Python
Python socket 套接字实现通信详解
2019/08/27 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
python编写俄罗斯方块
2020/03/13 Python
一套.net面试题及答案
2016/11/02 面试题
饮料业务员岗位职责
2013/12/15 职场文书
高中军训的心得体会
2014/09/01 职场文书
工作检讨书大全
2015/01/26 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书