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编写脚本获取手机当前应用apk的信息
Jul 21 Python
Python中用pycurl监控http响应时间脚本分享
Feb 02 Python
Python Json序列化与反序列化的示例
Jan 31 Python
Python玩转PDF的各种骚操作
May 06 Python
Python Pandas数据中对时间的操作
Jul 30 Python
python进阶之自定义可迭代的类
Aug 20 Python
django 简单实现登录验证给你
Nov 06 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
Python终端输出彩色字符方法详解
Feb 11 Python
多个python文件调用logging模块报错误
Feb 12 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
Python 中Operator模块的使用
Jan 30 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与XML联手进行网站编程代码实例
2008/07/10 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
js每次Title显示不同的名言
2008/09/25 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
JS实现的表格行上下移动操作示例
2016/08/03 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
Node.js中的child_process模块详解
2018/06/08 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
python使用socket连接远程服务器的方法
2015/04/29 Python
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
光荣入党自我鉴定
2014/01/22 职场文书
八年级生物教学反思
2014/01/22 职场文书
双创工作实施方案
2014/03/26 职场文书
法制宣传教育方案
2014/05/09 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
会议通知格式范文
2015/04/15 职场文书
python基础详解之if循环语句
2021/04/24 Python