在一组数字中查找对

时间:2015-04-07 11:00:31

标签: python

我是Python新手并试图编写一款简单的扑克游戏。如果我有五张卡,abcde,并想检查其中是否有任何一张(是一对),那么我想我可以写一行如下:

if a==b or b==c or a==c or ...  # ad nauseam

但我认为有一种工具可以有效地提问

  

如果(a,b,c,d,e)中的任何一个匹配,那么......

但是我不知道如何写它。

3 个答案:

答案 0 :(得分:1)

您可以使用itertools.combinations获取手中的所有卡片对。使用一个简单的例子:

>>> from itertools import combinations
>>> cards = (1, 2, 3, 4, 1)
>>> list(combinations(cards, 2))
[(1, 2), (1, 3), (1, 4), (1, 1), (2, 3), (2, 4), (2, 1), (3, 4), (3, 1), (4, 1)]

然后您可以使用any查看这些对中的任何一对是否相互匹配:

>>> any(card1 == card2 for card1, card2 in combinations(cards, 2))
True

你应该能够相对容易地适应你的表现形式;例如,如果您有Card个对象,则会调用Card.__eq__(card1, card2)

请注意,我使用了五个“cards”的序列(元组或列表也可用),而不是五个单独的标识符(a,{{1}等等);这使代码更具可读性和灵活性(手的大小现在无关紧要,因此您可以轻松地将seven-card stud添加到您的扑克游戏中。

答案 1 :(得分:1)

使用生成器表达式传递到any内置函数:

if any(cards.count(i) >= 2 for i in cards): # cards is the tuple of number

答案 2 :(得分:0)

我使用set不包含多个相同元素的事实,例如:

a=[1,1,2,2,3,3]
b=set(a)
print (b) # {1, 2, 3}
print len(a) == len(b) # False