我正在try 在数字字符串的两个部分中查找匹配项,我的输入"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,等等,并继续与其余的卡.我想我能想出如何计算分数but my main issue is having thematch part of the code count nothing as a match. Why is this happening?

代码:

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:

sep
The delimiter according which to split the string.
None (the default value) means split according to any whitespace,
and discard empty strings from the result.

Edit

我更喜欢这个版本:

with open('ref4', 'r') as fp:
    for line in fp:
        winners, choices = line[line.index(':')+1:].split('|')
        winners = [int(num) for num in winners.split()]
        choices = [int(num) for num in choices.split()]
        print(set(winners).intersection(choices))

Python相关问答推荐

如何在WSL2中更新Python到最新版本(3.12.2)?

Odoo 16使用NTFS使字段只读

根据列值添加时区

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

剪切间隔以添加特定日期

Cython无法识别Numpy类型

如何按row_id/row_number过滤数据帧

将一个双框爆炸到另一个双框的范围内

在用于Python的Bokeh包中设置按钮的样式

当输入是字典时,`pandas. concat`如何工作?

Pandas数据框上的滚动平均值,其中平均值的中心基于另一数据框的时间

正在try 让Python读取特定的CSV文件

Match-Case构造中的对象可调用性测试

使用元组扩展字典的产品挑战

Fake pathlib.使用pyfakefs的类变量中的路径'

为什么fizzbuzz在两个数字的条件出现在一个数字的条件之后时不起作用?

判断字典中是否有多个值对

是否在DataFrame中将所有列设置为大写?

使用裸变量和TypeDicts时的不同Mypy行为

将CONTEXT_PROCESSOR数据返回到html进行循环时出现问题