2011-10-18 18 views
6

我有一系列值(L,R,U,D)和两个变量,dnewd,其中包含其中之一。我需要检查dnewd是否在相同的子集(L,RU,D)或不在。
我知道我能做到这一点:检查两个变量是否具有来自两个不同集合的值,DRY方法

d in {'L','R'} and newd in {'U','D'} or d in {'U','D'} and newd in {'L','R'} 

这确实返回False,如果他们都在L,RU,D,和True否则值。尽管如此,我还是觉得这很费神。有关更多DRY方法的建议?

回答

4

如果你知道有只有两套和你的价值观必须是一个或另一个,那么你可以把它简化为这样:

(d in set1) == (newd in set2) 

说明:

  • 如果d在set 1中且newd在set 2中,则==的两侧都是True,因此表达式返回True
  • 如果d在集合2中且newd在集合1中,则==的两边都是False,因此表达式返回True
  • 如果它们在同一组中,==的一侧将返回False,另一侧True,因此表达式的结果将为False
+0

不坏...我不知道是否有办法做到这一点提的只有一组,但也许这是不可能的。 – etuardu

+0

@etuardu:'(set1中的d)!=(set1中的newd)'也适用。 –

+0

我的意思是只设置一次 – etuardu

0

如何:

In [8]: dmap = {'L':0, 'R':0, 'U':1, 'D':1} 

In [9]: dmap[d] != dmap[newd] 
Out[9]: False 
相关问题