在Python中确定两个数据集的相等性的最佳方法是什么?

10

你知道实现与这段代码相同结果的更简单的方法吗?

我有这段代码:
color1 = input("Color 1: ")
color2 = input("Color 2: ")

if ((color1=="blue" and color2=="yellow") or (color1=="yellow" and color2=="blue")):
            print("{0} + {1} = Green".format(color1, color2))

我也尝试了这个:

if (color1 + color2 =="blueyellow" or color1 + color2 =="yellowblue")

10
尽管「代码评审(Code Review)」可能是建议询问这种类型问题的好地方,但我们应该改掉把提问者转到那里的习惯。请阅读这篇元帖以获取澄清。 - idjaw
5
请停止提及代码审核。请阅读我在评论中发布的链接,了解为什么我们需要停止这样做。 - idjaw
3
set([color1, color2]) == set(["yellow", "blue"]) 集合([color1,color2]) == 集合(["黄色","蓝色"]) - zaquest
2个回答

21

你可以使用set进行比较。

当且仅当每个集合中的元素都包含在另一个集合中时,两个集合才相等。

In [35]: color1 = "blue"

In [36]: color2 = "yellow"

In [37]: {color1, color2} == {"blue", "yellow"}
Out[37]: True

In [38]: {color2, color1} == {"blue", "yellow"}
Out[38]: True

8
不要忽略大局。以下是更好的一般性问题解决方式。
如果你定义了“mixes”字典,其中将混合颜色作为键,结果颜色作为值,会怎样呢?
一种实现方法是使用自然上不可变的frozenset作为映射键:
mixes = {
    frozenset(['blue', 'yellow']): 'green'
}

color1 = input("Color 1: ")
color2 = input("Color 2: ")

mix = frozenset([color1, color2])
if mix in mixes:
    print("{0} + {1} = {2}".format(color1, color2, mixes[mix]))

这样,您可以轻松地扩展解决方案,添加不同的混合物而无需使用多个if/else嵌套条件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接