故事是从这里开始的…

Python字典实现伪切片功能

早上起床看到一条评论,有点懵逼,字典切片"htmlcode">

# 字典切片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字典实现伪切片功能

如果坐标重叠,重叠切个寂寞哦"text-align: center">Python字典实现伪切片功能

360°无死角切切切(正常切)
正数

Python字典实现伪切片功能

负数

Python字典实现伪切片功能

360°无死角切切切(从后往前切)
正数

Python字典实现伪切片功能

负数

Python字典实现伪切片功能

2.0代码比较繁琐,但是字典切片的效果还是清晰可见的~~~

标签:
Python伪切片,python字典伪切片

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“Python字典实现伪切片功能”
暂无“Python字典实现伪切片功能”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。