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采用raw_input读取输入值的方法
Aug 18 Python
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
Python实现简单登录验证
Apr 13 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
Mar 12 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
用python爬取租房网站信息的代码
Dec 14 Python
python flask解析json数据不完整的解决方法
May 26 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
Aug 05 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
python time()的实例用法
Nov 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
PHP新手上路(六)
2006/10/09 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
javascript 节点遍历函数
2010/03/28 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
2018/11/02 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
vue计算属性get和set用法示例
2019/02/08 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
python实现堆排序的实例讲解
2020/02/21 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
物业管理员岗位职责范文
2013/11/25 职场文书
实习单位鉴定评语
2014/04/26 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
被告代理词范文
2015/05/25 职场文书