#python #python-3.x #string
#python #python-3.x #строка
Вопрос:
У меня есть два списка: список 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
для каждой строки.
Комментарии:
1. Итак, каков ваш желаемый результат?
2. Я сравниваю два списка элемент за элементом, и для каждого сравнения я должен получить значение true или false.
Ответ №1:
Вы можете определить свою собственную функцию сравнения строк, чтобы перебирать символы один за другим и сравнивать их, при условии, что золотой символ не является значением «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]
Ответ №2:
Вы можете использовать
[all(char1 == 'X' or char1 == char2 for char1, char2 in zip(str1, str2)) for str1, str2 in zip(list1, list2)]
Ответ №3:
Я смог прийти к следующему пониманию списка:
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]