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 循环遍历字典元素的简单方法
Sep 11 Python
使用python实现ANN
Dec 20 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python离线安装PIL 模块的方法
Jan 08 Python
python issubclass 和 isinstance函数
Jul 25 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
Django与pyecharts结合的实例代码
May 13 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
Python Django搭建网站流程图解
Jun 13 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
python 爬取天气网卫星图片
Jun 07 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
oracle资料库函式库
2006/10/09 PHP
PHP简介
2006/10/09 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
php header功能的使用
2013/10/28 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
javascript静态的url如何传递
2007/05/03 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
javascript Object与Function使用
2010/01/11 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python读写Excel文件方法介绍
2014/11/22 Python
python递归函数绘制分形树的方法
2018/06/22 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
ECHT官方网站:男女健身服
2020/02/14 全球购物
高考备战决心书
2014/03/11 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
小学中队长竞选稿
2015/11/20 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python