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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
python多进程操作实例
Nov 21 Python
安装Python的教程-Windows
Jul 22 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
pycharm重命名文件的方法步骤
Jul 29 Python
python字典的遍历3种方法详解
Aug 10 Python
python 函数的缺省参数使用注意事项分析
Sep 17 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
Python必须了解的35个关键词
Jul 16 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
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
Python3.4实现远程控制电脑开关机
2018/02/22 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
模具数控专业自荐信
2014/01/27 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
学习党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
项目战略合作意向书
2015/05/08 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS