用字典简化啰嗦的if条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用字典简化啰嗦的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条件的主要内容,如果未能解决你的问题,请参考以下文章

Druid连接池——从0开始坚强的一点点的自学,Druid一点不懂的可以点进来,懂得别点进来,点进来你会嫌我啰嗦的

化繁为简的lombok

4.3 合并重复的条件执行片段

Java:用Lambda表达式简化代码一例

简化条件表达式

重构.改善既有代码的设计9简化条件表达式