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发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
python基础教程之实现石头剪刀布游戏示例
Feb 11 Python
动态规划之矩阵连乘问题Python实现方法
Nov 27 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
Python实现12306火车票抢票系统
Jul 04 Python
python二分法查找算法实现方法【递归与非递归】
Dec 06 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
python中如何进行连乘计算
May 28 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
Python 实现PS滤镜的旋涡特效
Dec 03 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
JNI的定义
2012/11/25 面试题
数控专业推荐信范文
2013/12/02 职场文书
销售团队口号大全
2014/06/06 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
上诉状格式
2015/05/23 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript