Немогу понять почему не работает if not in

Имеется два списока.

a = ['aa', 'bb', 'cc', 'nn!', 'rr#', 'tt' ]
b = ['!' , '#']
result1 = []
result2 = []

Пишу условия.

for i in a:
    for g in b:
        if g in i:
            result1.append(i)
        if g not in i:
            result2.append(i)

Первое условие выполняется верно, находит элементы в котором есть символы.

result1 = ['nn!', 'rr#']

А вот со вторым проблемка. Почему добавляет элементы с символами?

result2 = ['aa', 'aa', 'bb', 'bb', 'cc', 'cc', 'nn!', 'rr#', 'tt', 'tt']

Ответы (2 шт):

Автор решения: frozencoast

В вашем коде not in работает как положено, а вот логика кода не совсем верная. Следующий код вернет вам желаемый результат:

a = ['aa', 'bb', 'cc', 'nn!', 'rr#', 'tt' ]
b = ['!' , '#']
result1 = []
result2 = []

for i in a:
    contains = False
    for g in b:
        if g in i:
            contains = True
            break

    if contains:
        result1.append(i)
    else:
        result2.append(i)

print(result1)
print(result2)
→ Ссылка
Автор решения: splash58

можно записать это все чуть короче, пользуясь возможностями языка

a = ['aa', 'bb', 'cc', 'nn!', 'rr#', 'tt' ]
b = ['!' , '#']
result1 = []
result2 = []

for i in a:
   if any(g in i for g in b):
      result1.append(i)
   else:
      result2.append(i)
print(result1, result2)

или даже немного с извращением :)

for i in a:
   (result1 if any(g in i for g in b) else result2).append(i)
print(result1, result2)
→ Ссылка