Проверьте, имеют ли две переменные значения из двух разных наборов, способ СУХОЙ - PullRequest
6 голосов
/ 18 октября 2011

У меня есть диапазон значений (L,R,U,D) и две переменные, d и newd, содержащие одну из них. Мне нужно проверить, находятся ли d и newd в одном и том же подмножестве (L,R или U,D) или нет.
Я знаю, что могу сделать это:

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

это действительно возвращает False, если они оба имеют значения в L,R или U,D, и True в противном случае. Тем не менее, я нахожу это очень избыточным. Некоторые предложения о более DRY подходе?

Ответы [ 2 ]

4 голосов
/ 18 октября 2011

Если вы знаете, что существует только два набора и что ваши значения должны быть в одном или другом, то вы можете упростить это до:

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

Пояснение:

  • Если d в наборе 1, а newd в наборе 2, обе стороны == равны True, поэтому выражение возвращает True.
  • Если d в множестве 2, а newd в множестве 1, обе стороны == равны False, поэтому выражение возвращает True.
  • Если они находятся в одном наборе, одна сторона == вернет False, а другая True, поэтому результат выражения будет False.
0 голосов
/ 18 октября 2011

Как насчет:

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

In [9]: dmap[d] != dmap[newd]
Out[9]: False
...