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快速查找算法应用实例
Sep 26 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
Python实现购物车功能的方法分析
Nov 10 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
python脚本第一行如何写
Aug 30 Python
Python列表推导式实现代码实例
Sep 09 Python
python 如何设置守护进程
Oct 29 Python
python基于win32api实现键盘输入
Dec 09 Python
python 实现客户端与服务端的通信
Dec 23 Python
用60行代码实现Python自动抢微信红包
Feb 04 Python
基于python实现银行管理系统
Apr 20 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
基于pear auth实现登录验证
2010/02/26 PHP
PHP模块化安装教程
2016/06/01 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
详解thinkphp中的volist标签
2018/01/15 PHP
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
用python实现对比两张图片的不同
2018/02/05 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
Python numpy 点数组去重的实例
2018/04/18 Python
python操作redis方法总结
2018/06/06 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
Python企业编码生成系统之主程序模块设计详解
2019/07/26 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
护理专业自我鉴定
2014/01/30 职场文书
找工作求职信
2014/07/07 职场文书
个人存款证明书
2014/10/18 职场文书
模范班主任事迹材料
2014/12/17 职场文书
起诉书范文
2015/05/20 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python