Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 检查列表中的字符串是否多次出现_String_List_Python 3.x_Poker - Fatal编程技术网

String 检查列表中的字符串是否多次出现

String 检查列表中的字符串是否多次出现,string,list,python-3.x,poker,String,List,Python 3.x,Poker,我想知道下面这张牌是否是同花顺的: 在第一个案例中,我分析了5张卡片。如果所有5套西装都相同(C H D S),即只有一套西装,则同花顺为真。那很好 a=['AC', '3H', 'TD', '9C', 'KD'] flush = len({suit for _, suit in a}) ==1 #false 但实际上通常有7张牌。2个被球员拿着,5个在桌子上。这里变得有点复杂了。我如何检查是否有任何诉讼发生5次 b=['AC', '3H', 'TD', '9C', 'KD', '7H', '

我想知道下面这张牌是否是同花顺的:

在第一个案例中,我分析了5张卡片。如果所有5套西装都相同(C H D S),即只有一套西装,则同花顺为真。那很好

a=['AC', '3H', 'TD', '9C', 'KD']
flush = len({suit for _, suit in a}) ==1 #false
但实际上通常有7张牌。2个被球员拿着,5个在桌子上。这里变得有点复杂了。我如何检查是否有任何诉讼发生5次

b=['AC', '3H', 'TD', '9C', 'KD', '7H', '5S']
flush = ?

速度非常重要,因为这是蒙特卡洛模拟的内部循环的一部分,所以如果可能的话,这应该是一条直线。

您可以使用
count
max
来查找。。。嗯,任何一套衣服的最大数量,看看是否至少有5套

list = ['AC', '3H', 'TD', '9C', 'KD']
substring='C'
print( len([s for s in list if substring in s]))
>>> b = ['AC', '3H', 'TD', '9C', 'KD', '7H', '5S']
>>> suits = [s for _, s in b]
>>> max(suits.count(s) for s in suits) >= 5
False
但这将循环该列表中每个元素的
suits
,使其复杂性为O(n^2)。考虑到
n
只有7,可能还不算太坏,但仍然是。或使用。这应该快得多(O(n)),因为它使用字典来跟踪计数

>>> max(collections.Counter((s for _, s in b)).values())
2
>>> collections.Counter((s for _, s in b)).most_common(1)
[('H', 2)]

如果速度是关键,那么,只有7张牌,4套西装。这就是16384个组合。我会将每个组合转换为一个数字,并使用这个数字作为索引在预计算的表中进行查找

CONV = dict(C=0, H=1, D=2, S=3)
def flush_table_index(cards):
    n = 0 
    for _, s in cards:
        n = n * 4 + CONV[s]
    return n

编辑:
如果elif elif
而不是CONV会更快。但这不是一个漂亮或有趣的代码。

上面的代码将为您提供列表中特定套装的计数。您不需要“正好5次”,您需要“5次或更多次”。但是对于速度来说,最重要的是停止使用字符串作为卡片。弦是给人类的;计算机使用数字。