我正在尝试在一串数字的两个部分中查找匹配项,我的输入“ref4”是:
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
当我尝试从中间分割线的一侧找到匹配项时,即在卡 1 上,匹配项将为 48、83、86 和 17,但它也将 '' 视为匹配项。我得到的确切结果是:
{'', '48', '83', '86', '17'}
{'', '32', '61'}
{'', '1', '21'}
{'', '84'}
{''}
{''}
这导致匹配数为“5”,因为每次匹配都没有计算任何内容,而实际上应该是“4”(卡 1)
我不知道为什么它实际上没有算作一场比赛,但这扰乱了我正确计算得分的能力。我的目标是找到比赛,一场比赛得一分,之后的每场比赛得分都会加倍。例如,卡 1 应该有 8 分的比赛,总共 4 场比赛,因此只有 1x2x2x2 等,然后继续处理其余的卡。我想我可以弄清楚如何计算分数 但我的主要问题是代码的 匹配部分不计为匹配。为什么会出现这种情况?
代码:
with open('ref4', 'r') as fp:
for line in fp:
winners = line.split(':')[1].split('|')[0].split(' ')
choices = line.strip().split('|')[-1].split(' ')
def common_member(win, choice):
win_set = set(win)
choice_set = set(choice)
if win_set & choice_set:
match = win_set & choice_set
print(match)
common_member(winners, choices)
参考4:
Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53
Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1
Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83
Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11
不要使用分隔符在空格上进行分割,让 Python 来完成这项工作。我只是将字符串转换为理解中的数字:
with open('ref4', 'r') as fp:
for line in fp: # remove separator here --v
winners = [int(num) for num in line.split(':')[1].split('|')[0].split()]
choices = [int(num) for num in line.strip().split('|')[-1].split()]
print(set(winners).intersection(choices))
输出:
{48, 17, 83, 86}
{32, 61}
{1, 21}
{84}
set()
set()
文档
str.split
:
九月
分割字符串所依据的分隔符。
None(默认值)表示根据任意空格分割,
并从结果中丢弃空字符串。