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转换字符串为摩尔斯电码的方法
Jul 06 Python
Python多继承顺序实例分析
May 26 Python
python+Splinter实现12306抢票功能
Sep 25 Python
在Python中定义一个常量的方法
Nov 10 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
解析python的局部变量和全局变量
Aug 15 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 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的一个登录的类 [推荐]
2007/03/16 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
PHP静态成员变量
2017/02/14 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
解决layer.confirm快速点击会重复触发事件的问题
2019/09/23 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
详解vue中使用transition和animation的实例代码
2020/12/12 Vue.js
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
大学自荐信
2013/12/12 职场文书
毕业生自荐信格式
2014/03/07 职场文书
遗体告别仪式主持词
2014/03/20 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
图解上海144收音机
2021/04/22 无线电