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实现点对点聊天程序
Jul 28 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
python的移位操作实现详解
Aug 21 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
Python程序控制语句用法实例分析
Jan 14 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
Jupyter notebook如何修改平台字体
May 13 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
python调用摄像头的示例代码
Sep 28 Python
pycharm 复制代码出现空格的解决方式
Jan 15 Python
Flask中jinja2的继承实现方法及实例
Mar 03 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
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
2017/04/20 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
js实现计算器功能
2020/08/10 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
Python编程之序列操作实例详解
2017/07/22 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
促销活动总结模板
2014/07/01 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
单位接收函格式
2015/01/30 职场文书
员工工作表现自我评价
2015/03/06 职场文书
食品卫生管理制度
2015/08/06 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js