首页 > 代码库 > 用字典简化啰嗦的if条件
用字典简化啰嗦的if条件
今天这一题是关于一个小技巧。题目是这样的:
给定一个表示行进方向的列表,如["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"],对它进行简化。
如何简化呢?比如第一步是向北走,第二步是向南走,实际上相当于原地不动,这两步可以抵消。东西向也是同样的道理。
分析:
解法的逻辑非常简单,相当于把输入列表的元素依次加入一个栈(stack),如果要加入的元素与栈顶的元素可以抵消,则该元素不加入,且要pop栈顶的元素。
实现要点:
1. 如何表示“可以抵消”?
可以啰嗦的写为:
if (a == ‘SOUTH‘ and b == ‘NORTH‘) \
or (a == ‘NORTH‘ and b == ‘SOUTH‘) \
or (a == ‘EAST‘ and b == ‘WEST‘) \
or (a == ‘WEST‘ and b == ‘EAST‘)
但是更简单的做法是事先创建一个字典:
opposite = {‘NORTH‘: ‘SOUTH‘, ‘EAST‘: ‘WEST‘, ‘SOUTH‘: ‘NORTH‘, ‘WEST‘: ‘EAST‘}
则上述代码可以简化为:if a == opposite(b)
2. 栈的实现:
栈可以方便的用list实现。入栈用list.append(),出栈用list.pop(),栈顶元素为list[-1]。
借用某个源代码:
opposite = {‘NORTH‘: ‘SOUTH‘, ‘EAST‘: ‘WEST‘, ‘SOUTH‘: ‘NORTH‘, ‘WEST‘: ‘EAST‘} def dirReduc(plan): new_plan = [] for d in plan: if new_plan and new_plan[-1] == opposite[d]: new_plan.pop() else: new_plan.append(d) return new_plan
灵活运用Python的语法,写出简洁的代码,始终是一种追求。
用字典简化啰嗦的if条件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。