list1 = str(list1)
list2 = str(list2)
Вы преобразуете свой список в строку с приведенными выше инструкциями. Поэтому, когда вы повторяете цикл for, вы повторяете каждый символ, а не каждое слово.
Таким образом, вы должны удалить преобразование строк и вместо этого сделать понимание списка следующим образом.
Кроме того, в вашем файле результатов вместо проверки, находится ли слово в списке list2 в списке list1, вы проверяете обратное. Таким образом, вы получили 100 и 200 в качестве символов, которые находятся в списке 2.
list1 = ['bj-100-cy','bj-101-hd','sh-200-pd','sh-201-hp']
list2 = [100, 200]
outcome = [x for x in list1 for y in list2 if str(y) in x]