我有两个列表,一个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
。
答案 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]