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 psutil模块简单使用实例
Apr 28 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
Python 3.9的到来到底是意味着什么
Oct 14 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 Python
pandas中DataFrame检测重复值的实现
May 26 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
福利彩票幸运号码自动生成器
2006/10/09 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
python列表生成器迭代器实例解析
2019/12/19 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
专业毕业生个性的自我评价
2013/10/03 职场文书
营业员个人总结的自我评价
2013/10/25 职场文书
高中军训广播稿
2014/01/14 职场文书
初一科学教学反思
2014/01/27 职场文书
税务干部鉴定材料
2014/02/11 职场文书
学校后勤岗位职责
2014/02/19 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
艺术节开幕词
2015/01/28 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
Python中的xlrd模块使用整理
2021/06/15 Python