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 07 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
python实现图片压缩代码实例
Aug 12 Python
Python字符串处理的8招秘籍(小结)
Aug 13 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
python代码如何实现余弦相似性计算
Feb 09 Python
Python常用编译器原理及特点解析
Mar 23 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
python编程的核心知识点总结
Feb 08 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 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 字符串替换的方法
2012/01/10 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
2013/07/01 PHP
PHP实现图片旋转效果实例代码
2014/10/01 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
Python实现统计单词出现的个数
2015/05/28 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
Python创建或生成列表的操作方法
2019/06/19 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
python实现猜单词游戏
2020/05/22 Python
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
村委会贫困证明范文
2014/09/21 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
新闻稿怎么写
2015/07/18 职场文书
2015年度女工工作总结
2015/10/22 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
Java 数据结构七大排序使用分析
2022/04/02 Java/Android
Python实现日志实时监测的示例详解
2022/04/06 Python