Сначала вам нужно преобразовать номера входов в строки, поскольку вас интересуют цифры, которые они содержат, а не фактические значения. Вы можете использовать str
для этого.
Чтобы решить актуальную проблему вы хотите, чтобы проверить, есть ли любой строка в основных таких, что всех символов в этой строке содержится в строка матча.
any(all(c in match for c in x) for x in main)
Вот более полная программа испытаний:
main = ['123', '147', '159', '258', '369', '357', '456', '789']
match1 = str(1374)
match2 = str(1892)
def has_any_match(main, match):
return any(all(c in match for c in x) for x in main)
print has_any_match(main, match1)
print has_any_match(main, match2)
Выход:
True
False
Если один вкладыш слишком много, чтобы поглотить, вы можете разбить его вверху:
def is_match(word, match):
# Test if all the characters in word are also in match.
return all(c in match for c in word)
def has_any_match(main, match):
# Test if there is any word in main that matches.
return any(is_match(word, match) for word in main)
* Что такое решение оптимизировать * - Оптимизирован для чего? Читаемость я предполагаю (надеюсь)? –
Вы имеете в виду, что 3 или более цифр совпадают и 2 или менее не совпадают? Это зависит от 'len (str (match1))'? – khachik
main имеет значение «123», поэтому, если любая строка «3429523913» имеет все значения 1, 2 и 3. Таким образом, она соответствует. То есть он проверяет весь элемент списка и сопоставляет цифры в элементе. – Tauquir