每隔4个通道插入

2024-09-30 22:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我见过这个问题的解决方案是其他问题,但在Python中没有。我在想,如何在一个字符串中的每个x值字符后面插入一个字符?例如,每四个字符后加一个正斜杠:

Before:
AsQs7d4dJh2h

After:
AsQs/7d4d/Jh2h

我知道在Python中我必须使用切片表示法。 x=AsQs7d4dJh2h x=x[0:4]

但这只给了我第一个例子,我希望能够在任何字符串上都这样做,而不管字符串的长度

我要做的是将字符串分离成卡片对(2-card texas holdem),问题是算法没有考虑到'10'卡片,因此将每4张分开是不起作用的,例如,当字符串中有10张卡片时会发生这种情况:

^{pr2}$

所以我需要帮助的是如何插入一个正斜杠或从字符串中提取所有2个牌手(在本例中是3个手牌),而不管字符串中是否有1张或多张“10”牌?在

完整算法:

import itertools

strOutput = ""
lstMaster = ['As', 'Ks', 'Qs', 'Js', '10s', '9s', '8s', '7s', '6s', '5s', '4s', '3s', '2s',\
                 'Ad', 'Kd', 'Qd', 'Jd', '10d', '9d', '8d', '7d', '6d', '5d', '4d', '3d', '2d',\
                 'Ac', 'Kc', 'Qc', 'Jc', '10c', '9c', '8c', '7c', '6c', '5c', '4c', '3c', '2c',\
                 'Ah', 'Kh', 'Qh', 'Jh', '10h', '9h', '8h', '7h', '6h', '5h', '4h', '3h', '2h']

tupMasterEdited = itertools.combinations(lstMaster, 6)
lstMasterEdited = list(tupMasterEdited)

for combo in lstMasterEdited:
    combo = str(combo).replace("(", "").replace(")", "").replace(" ", "").replace(",", "").replace("'", "")
    combo = '/'.join([combo[i:i+4] for i in range(0, len(combo), 4)])
    print(combo)

Tags: 字符串in算法for解决方案字符replaceitertools
3条回答

这可以通过替换来解决:

 import re

 re.sub(r'((?:(?=(10|.))\2){4})(?!$)', r'\1/', 'AsQs10dAh10h2h')

(?=(10|.))\2模拟一个原子组(re模块中不可用的特性)并代表(?>10|.)。这使用了一个事实,即lookahead的内容是原子的。在

(?!$)是一个否定的lookahead,意思是后面不跟字符串的结尾

可能不是最好的解决方案:

'/'.join([str[i:i+4] for i in range(0, len(str), 4)])

^{pr2}$

如果regex是一个选项:

>>> re.sub(r'(.{4})(?=.)', r'\1/', 'AsQs7d4dJh2h')
'AsQs/7d4d/Jh2h'

相关问题 更多 >