检查两个变量是否具有来自两个不同集合的值(DRY 方式)

发布于 2024-12-10 21:00:43 字数 546 浏览 0 评论 0原文

我有一系列值 (L,R,U,D) 和两个变量,dnewd,其中包含其中一个。我需要检查 dnewd 是否在同一子集中(L,RU,D)或不。
我知道我可以这样做:

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

如果它们都具有 L,RU,D中的值,这确实会返回 False否则为真。尽管如此,我还是觉得它很多余。关于更DRY方法的一些建议?

I have a range of values (L,R,U,D) and two variables, d and newd, containing one of them. I need to check if d and newd are in the same subset (L,R or U,D) or not.
I know I can do this:

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

this indeed returns False if they both have values in L,R or U,D, and True otherwise. Still, I find it much reduntant. Some suggestions about a more DRY approach?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

满地尘埃落定 2024-12-17 21:00:43

如果您知道只有两个集合,并且您的值必须位于其中一个集合中,那么您可以将其简化为:

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

说明:

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

If you know that there are only two sets and that your values must be in one or the other, then you can simplify it to this:

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

Explanation:

  • If d is in set 1 and newd is in set 2, both sides of the == are True, so the expression returns True.
  • If d is in set 2 and newd is in set 1, both sides of the == are False, so the expression returns True.
  • If they are in the same set, one side of the == will return False and the other True so the result of the expression will be False.
可是我不能没有你 2024-12-17 21:00:43

怎么样:

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

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

How about:

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

In [9]: dmap[d] != dmap[newd]
Out[9]: False
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文