Нечитабельно и сложно поддерживать - ты завтра уже забудешь что тут написано
К тому же у тебя уже логические ошибки - неправильная группировка условия or / and - ты забыл поставить скобки
Твой вариант
txt = 'sdf s7878 adsf '
trash_words = ['s7878']
s = ' '.join([i for i in txt.split() if i.isupper() or i.isdigit() or [x.isdigit() for x in i].count(True) > 0 or [x.isupper() for x in i].count(True) >= 2 and i.lower() not in trash_words])
print(s)
выдает
s7878
а должен ничего не выдавать
Правильно должно быть так
s = ' '.join([i for i in txt.split() if (i.isupper() or i.isdigit() or [x.isdigit() for x in i].count(True) > 0 or [x.isupper() for x in i].count(True) >= 2) and i.lower() not in trash_words])
Я бы сделал вот так
def check_str(i):
if ((i.isupper() or
i.isdigit() or
[x.isdigit() for x in i].count(True) > 0 or
[x.isupper() for x in i].count(True) >= 2) and
i.lower() not in trash_words):
return True
return False
txt = 'sdf s7878 adsf '
trash_words = []
print(' '.join([i for i in txt.split() if check_str(i)]))