在python中存储长组卡组合

时间:2013-12-27 20:28:58

标签: python

我想存储52张卡片组中的所有5张卡片组合。

一手牌的例子可能是:['3s','Th','4s','9d','Ah']。大约有250万张5张牌的组合。有些人比其他人好。我想对它们进行排名,然后能够看到一只手看看它有多好(即手x在所有手牌的前10%可能)。

存储数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

不是列出所有组合,而是使用扑克牌类别(来自Wikipedia的概率):

  1. 直接冲洗 - 0.0015%
  2. 四种 - 0.024%
  3. 满屋 - 0.1441%
  4. 冲洗 - 0.196%
  5. 直 - 0.39%
  6. 三种 - 2.11%
  7. 两对 - 4.75%
  8. 一对 - 42.26%
  9. 高牌 - 50.11%
  10. 您可以将这些内容保存在{str:float}词典中,或在list中查找以使用排序:

    hands = ["straight flush", ...]
    percs = [0.0015, ...]
    
    better_than = sum(percs[hands.index(hand_class) + 1:])
    

答案 1 :(得分:0)

正如其他人所评论的那样,你想要做的事情可能是 不应 为你感兴趣的特定应用做的事情,但如果你坚持的话这样做(或者如果您的用例的参数不是我们期望的,并且您确实需要由于某种原因需要列举的52c5组合序列),您应该将所有可能的手的集合存储为生成器。这可以使用itertools轻松完成:

standard_deck = ['%i%s'%(i+1,j) for i in xrange(13) for j in 'shdc']
all_possible_five_card_hands = itertools.combinations(standard_deck,5)