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 之编写简单乘法运算题
Feb 27 Python
pygame实现弹力球及其变速效果
Jul 03 Python
Python 实现网页自动截图的示例讲解
May 17 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
Django实现学员管理系统
Feb 26 Python
python实现Virginia无密钥解密
Mar 20 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
Python函数的默认参数设计示例详解
Dec 01 Python
最小二乘法及其python实现详解
Feb 24 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
python实现在列表中查找某个元素的下标示例
Nov 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
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
用JS实现选项卡
2020/03/23 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python 迭代器和iter()函数详解及实例
2017/03/21 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
python scatter函数用法实例详解
2020/02/11 Python
python爬虫 requests-html的使用
2020/11/30 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
戴尔英国官网:Dell英国
2017/05/27 全球购物
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
司机工作自我鉴定
2014/09/19 职场文书
财务会计求职信范文
2015/03/20 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
新人入职感言
2015/07/31 职场文书