Python字典实现伪切片功能


Posted in Python onOctober 28, 2020

故事是从这里开始的…

Python字典实现伪切片功能

早上起床看到一条评论,有点懵逼,字典切片?
查阅了一下Python资料,3.6版本的Python改写了dict的内部算法,3.6版本之前是无序的;
So,现在就是有序的啦,注意的是这个顺序是key的插入顺序;
但字典虽有序没下标怎么切片?list列表?
那就把key放进list里,利用list自身的截取方法切一下片!
再用截取后的key对新的字典赋值!
所以脑子一热就写了个字典切片1.0版本

# 字典切片1.0版本
def dictcut(dict, start, end):
  # 临时存放字典的key
  temp = list(dict.keys())
  # 返回一个字典
  result = {}
  #切列表里的key
  temp = temp[start:end]
  for i in range(len(temp)):
    #用切完后的key列表对新的字典赋值
    result[temp[i]] = dict.get(temp[i])
  return result
#原字典
dict = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4"}
print("dict:", dict)
start = eval(input("起始位置:"))
end = eval(input("结束位置:"))
#调用切片方法
newdict =dictcut(dict, start, end)
print("dictcut(dict,%d,%d):" % (start, end), newdict)

然后运行结果

两个数为正,而且不越界,正常截取

Python字典实现伪切片功能

如果我想从2截取到末尾,末尾坐标是-1,但传[2 : -1]就会截取[2,-1),截取不到最后一个;那如果传[2 : 0]就会像下面一样

Python字典实现伪切片功能 

所以list[2: ]截取从2到最后一个,在传参方面就显得很麻烦了

如果截取[-5,-3]没问题,但是[-3,-5]就不行了

Python字典实现伪切片功能Python字典实现伪切片功能

综上,我希望我的字典切片可以三百六四度无死角切,从正到负,从前到后,正着切,逆着切

所以字典切片2.0版本就登场了!

# 字典切片2.0
def dictcut(dict, start, end):
  # 临时存放字典的key
  temp = list(dict.keys())
  # 返回一个字典
  result = {}
  # 分两个分支 1.start和end在可切片范围内 2.不在范围内
  if start <= len(temp) - 1 and start >= -len(temp) and end <= len(temp) - 1 and end >= -len(temp):
    #start大于end,且下标不重叠
    if start > end and start - 1 != len(temp) + end:
      #start和end同时为大于等于0
      if start >= 0 and end >= 0:
        # (4,2) 4 0 1
        for i in range(start, len(temp)):
          result[temp[i]] = dict.get(temp[i])
        for i in range(0, end):
          result[temp[i]] = dict.get(temp[i])
      # start和end同时小等于0
      if start <= 0 and end <= 0:
        # (-1,-3) 4 0 1
        for i in range(len(temp) + start, len(temp)):
          result[temp[i]] = dict.get(temp[i])
        for i in range(0, len(temp) + end):
          result[temp[i]] = dict.get(temp[i])
      # start大于0,end小于0
      if start >= 0 and end < 0:
        # (1,-2) 1 2
        for i in range(start, len(temp) + end):
          result[temp[i]] = dict.get(temp[i])

    # end大于start,且下标不重叠
    elif end > start and start + len(temp) != end - 1:
      # start和end同时为大于等于0
      if start >= 0 and end >= 0:
        # (0,3) 0 1 2
        for i in range(start, end):
          result[temp[i]] = dict.get(temp[i])
      # start和end同时大小等于0
      if start <= 0 and end <= 0:
        # (-4,-1) 1 2 3
        for i in range(len(temp) + start, len(temp) + end):
          result[temp[i]] = dict.get(temp[i])
      # end大等于0,start小于0
      if end >= 0 and start < 0:
        # (-1,3) 4 0 1 2
        for i in range(len(temp) + start, len(temp)):
          result[temp[i]] = dict.get(temp[i])
        for i in range(end):
          result[temp[i]] = dict.get(temp[i])
    #start等于end,或者下标重叠
    elif end == start or start + len(temp) == end - 1 or end <= 0 and start - 1 == len(temp) + end:
      print("切了个寂寞!")
  # start或者end不在范围内
  else:
    print("传入参数有误!")
  return result
#原字典
dict = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4"}
print("dict:", dict)
print("字典切割:左闭右开")
start = eval(input("起始位置:"))
end = eval(input("结束位置:"))
newdict = dictcut(dict, start, end)
# 如果返回的字典不为空,打印结果
if len(newdict) != 0:
  print("dictcut(dict,%d,%d):" % (start, end), newdict)

运行结果:

若不在范围

Python字典实现伪切片功能

如果坐标重叠,重叠切个寂寞哦?

Python字典实现伪切片功能

360°无死角切切切(正常切)
正数

Python字典实现伪切片功能

负数

Python字典实现伪切片功能

360°无死角切切切(从后往前切)
正数

Python字典实现伪切片功能

负数

Python字典实现伪切片功能

2.0代码比较繁琐,但是字典切片的效果还是清晰可见的~~~

到此这篇关于Python字典实现伪切片功能的文章就介绍到这了,更多相关Python伪切片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
初学Python函数的笔记整理
Apr 07 Python
插入排序_Python与PHP的实现版(推荐)
May 11 Python
python操作excel的方法
Aug 16 Python
django+echart绘制曲线图的方法示例
Nov 26 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
python flask解析json数据不完整的解决方法
May 26 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
python 基于opencv 绘制图像轮廓
Dec 11 Python
pytorch 中autograd.grad()函数的用法说明
May 12 Python
python使用selenium爬虫知乎的方法示例
Oct 28 #Python
怎么解决pycharm license Acti的方法
Oct 28 #Python
python如何快速拼接字符串
Oct 28 #Python
Python实现简单的猜单词小游戏
Oct 28 #Python
Python中openpyxl实现vlookup函数的实例
Oct 28 #Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 #Python
Python下使用Trackbar实现绘图板
Oct 27 #Python
You might like
php时间不正确的解决方法
2008/04/09 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
js实现选项卡效果
2020/03/07 Javascript
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
努比亚手机官网:nubia
2016/10/06 全球购物
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
英国第一独立滑雪板商店:The Snowboard Asylum
2020/01/16 全球购物
初中同学聚会感言
2014/02/11 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
转让协议书范本
2014/09/13 职场文书
房产公证书
2015/01/23 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
七个Python必备的GUI库
2021/04/27 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫
vue如何清除浏览器历史栈
2022/05/25 Vue.js