字符串比较与无关(忽略)字符

时间:2019-04-04 14:34:46

标签: python python-3.x string

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

字符串的长度完全相同。金色字符串中有一些用'X'标记的字符,在比较中不应考虑这些字符。

例如:

Golden = [
    '023XX1FD', 'FEBFF1B6', 'XXXXXXXX', '????????', '00000XXX', 
    '00000000', '00000000', '00000000', '00000800'
]

Measured = [
    '0236C1FD', 'FEBFF1B6', '00F1FC3F', '????????', '00000000', 
    '00000000', '00000000', '00000000', '00000800'
]

'023XX1FD''0236C1FD'进行比较应返回true,因为我们只应比较金色字符串中不等于'X'的部分。

在此示例中,每个字符串的输出为True

3 个答案:

答案 0 :(得分:2)

您可以定义自己的字符串比较函数,以逐个浏览字符并进行比较,只要金色字符不是“ Do n'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]

答案 1 :(得分:1)

您可以使用

[all(char1 == 'X' or char1 == char2 for char1, char2 in zip(str1, str2)) for str1, str2 in zip(list1, list2)]

答案 2 :(得分:1)

我已经能够提出以下列表理解:

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]
相关问题