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完成FizzBuzzWhizz问题(拉勾网面试题)示例
May 05 Python
Python如何import文件夹下的文件(实现方法)
Jan 24 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
Python Flask框架扩展操作示例
May 03 Python
python3 property装饰器实现原理与用法示例
May 15 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
基于Python实现签到脚本过程解析
Oct 25 Python
python入门之基础语法学习笔记
Feb 08 Python
python 实现aes256加密
Nov 27 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 Python
用Python远程登陆服务器的步骤
Apr 16 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数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
js获取本机操作系统类型的两种方法
2015/12/19 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
python实现按行切分文本文件的方法
2016/04/18 Python
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
软件测试常见笔试题
2012/02/04 面试题
车间操作工岗位职责
2013/12/19 职场文书
房地产广告策划方案
2014/05/15 职场文书
博士生求职信
2014/07/06 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
老干部座谈会主持词
2015/07/03 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技