列表没有考虑到相似性? [重复]

问题描述 投票:0回答:1

我正在尝试在一串数字的两个部分中查找匹配项,我的输入“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 list math count
1个回答
0
投票

不要使用分隔符在空格上进行分割,让 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(默认值)表示根据任意空格分割,
并从结果中丢弃空字符串。

© www.soinside.com 2019 - 2024. All rights reserved.