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 01 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
Feb 23 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
python实现雪花飘落效果实例讲解
Jun 18 Python
Python文本处理简单易懂方法解析
Dec 19 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
Django重设Admin密码过程解析
Feb 10 Python
Python爬虫抓取指定网页图片代码实例
Jul 24 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
Python 文本滚动播放器的实现代码
Apr 25 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
PHP 函数执行效率的小比较
2010/10/17 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
js每次Title显示不同的名言
2008/09/25 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
JavaScript实现标题栏文字轮播效果代码
2015/10/24 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
轻松理解Python 中的 descriptor
2017/09/15 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
财务部岗位职责
2013/11/19 职场文书
投资建议书模板
2014/05/12 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
催款函范文
2015/06/24 职场文书
处罚决定书范文
2015/06/24 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书