猿问

与不关心(忽略)字符的字符串比较

我有两个列表,一个golden字符串列表和一个measured字符串列表。我必须逐个元素比较这些列表。


字符串具有完全相同的长度。金色串中有标有 的字符,'X'在比较中不考虑。


例如:


Golden = [

    '023XX1FD', 'FEBFF1B6', 'XXXXXXXX', '????????', '00000XXX', 

    '00000000', '00000000', '00000000', '00000800'

]


Measured = [

    '0236C1FD', 'FEBFF1B6', '00F1FC3F', '????????', '00000000', 

    '00000000', '00000000', '00000000', '00000800'

]

和'023XX1FD'with 的比较'0236C1FD'应该返回真,因为我们应该只比较'X'金线中不等于的部分。


对于此示例,输出True针对每个字符串。


米琪卡哇伊
浏览 148回答 3
3回答

侃侃尔雅

可以定义自己的字符串比较函数,将字符一一遍历并进行比较,只要金色字符不是“Don't Care”值即可:def myStringCompare(golden, measured, dont_care="X"):    return (        (len(golden) == len(measured)) and         all(g == m for g, m in zip(golden, measured) if g != dont_care)    )然后在列表理解中使用这个函数:print([myStringCompare(a, b) for a, b in zip(Golden, Measured)])#[True, True, True, True, True, True, True, True, True]

aluckdog

您可以使用[all(char1 == 'X' or char1 == char2 for char1, char2 in zip(str1, str2)) for str1, str2 in zip(list1, list2)]

catspeake

我已经能够提出以下列表理解:result_list = [    all(        [            symbol == b[list_index][symbol_index]            for symbol_index, symbol in enumerate(item)            if symbol != "X"        ]    )    for list_index, item in enumerate(a)]> [True, True, True, True, True, True, True, True, True]
随时随地看视频慕课网APP

相关分类

Python
我要回答