Для ситуации, когда "чёрный список" длинный, но статичный, а элементы можно сравнивать, может иметь смысл отсортировать списки и двигаться по обоим. Если списки отсортированы заранее, то сложность будет O(M+N), вместо O(M*N). Если не отсортированы, то всё будет определяться скоростью сортировки.
black_list = list('1234567890h')
black_list.sort()
tested_list = list('dabeghfc')
tested_list.sort()
black_last, tested_last = len(black_list)-1, len(tested_list)-1
black_idx, tested_idx = 0, 0
black_item, tested_item = black_list[black_idx], tested_list[tested_idx]
while True:
if black_item < tested_item and black_idx < black_last:
# элемент в чёрном списке меньше - идём вперёд по чёрному списку, если есть куда
black_idx += 1
black_item = black_list[black_idx]
elif black_item > tested_item and tested_idx < tested_last:
# элемент в чёрном списке больше - идём вперёд по тестирумому списку, если есть куда
tested_idx += 1
tested_item = tested_list[tested_idx]
else: # либо элементы равны (есть вхождение), либо один из списков закончился
break
print('Есть вхождение!' if black_item == tested_item else 'Нет вхождения')