2011-10-18 33 views
6

Tôi có một phạm vi giá trị (L,R,U,D) và hai biến, dnewd, chứa một trong số chúng. Tôi cần kiểm tra xem có dnewd nằm trong cùng một tập con (L,R hoặc U,D) hay không.
Tôi biết tôi có thể làm điều này:Kiểm tra xem hai biến có giá trị từ hai tập hợp khác nhau hay không, cách DRY

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

này thực sự trả False nếu cả hai đều có giá trị trong L,R hoặc U,D, và True khác. Tuy nhiên, tôi thấy nó rất nhiều. Một số đề xuất về cách tiếp cận hơn DRY?

Trả lời

4

Nếu bạn biết rằng chỉ có hai bộ và giá trị của bạn phải thể ở một hay cách khác, sau đó bạn có thể đơn giản hóa nó như thế này:

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

Giải thích:

  • Nếu d nằm trong tập 1 và newd nằm trong tập 2, cả hai mặt của ==True, do đó biểu thức trả về True.
  • Nếu d là trong tập 2 và newd nằm trong tập 1, cả hai mặt của ==False, do đó biểu thức trả về True.
  • Nếu chúng nằm trong cùng một tập hợp, một bên của == sẽ trả về FalseTrue khác để kết quả của biểu thức sẽ là False.
+0

Not bad at all ... Tôi tự hỏi nếu có một cách để làm điều này nhắc đến chỉ có một bộ, nhưng có lẽ đó là điều không thể. – etuardu

+0

@etuardu: '(d trong set1)! = (Newd trong set1)' cũng hoạt động. –

+0

Tôi có nghĩa là một bộ chỉ một lần – etuardu

0

Làm thế nào về:

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

In [9]: dmap[d] != dmap[newd] 
Out[9]: False 
Các vấn đề liên quan