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中异常捕获方法详解
Mar 03 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
python numpy 按行归一化的实例
Jan 21 Python
Python3之手动创建迭代器的实例代码
May 22 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
Python将string转换到float的实例方法
Jul 29 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
浅析Python3 pip换源问题
Jan 06 Python
python 利用opencv实现图像网络传输
Nov 12 Python
python文件路径操作方法总结
Dec 21 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中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
javascript demo 基本技巧
2009/12/18 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
原生js实现日期联动
2015/01/12 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python2.7到3.x迁移指南
2018/02/01 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python框架中flask知识点总结
2018/08/17 Python
Django接收自定义http header过程详解
2019/08/23 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
简单html5代码获取地理位置
2014/03/31 HTML / CSS
使用canvas绘制超炫时钟
2014/12/17 HTML / CSS
PHP面试题-$message和$$message的区别
2015/12/08 面试题
销售提升方案
2014/06/07 职场文书
毕业生对母校寄语
2015/02/26 职场文书
2016年记者节感言
2015/12/08 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技