Следуя:
list1 = ['something',"somet'hing",'somet"hing','some;thing','']
list2 = [';','"',"'"]
Я хотел бы получить отфильтрованный список1, если строка внутри списка содержит любой символ из списка2 или строка пуста. Желаемый результат:
list3 = ['something']
В настоящее время я делаю это вручную следующим образом:
list1withoutEmptyLines= list(filter(None, list1))
list1withoutQuote = [x for x in list1withoutEmptyLines if "'" not in x]
list1withoutDoublequotes = [x for x in list1withoutQuote if "\"" not in x]
list1withoutSemicolon = [x for x in list1withoutDoublequotes if ";" not in x]
и он отлично работает. Я также попытался автоматизировать его, создав список запрещенных символов:
forbiddenCharacters = ['"', ';', '\'']
filteredLines = []
for character in forbiddenCharacters:
filteredLines = [x for x in uniqueLinesInFile if character not in x]
но список с именем filterLines по-прежнему содержит строки с точкой с запятой ";". Любые советы будут оценены.
Вы можете сделать это, используя понимание списка в сочетании со встроенной функцией any:
list1 = ['something', "somet'hing", 'somet"hing', 'some;thing', '']
list2 = [';', '"', "'"]
result = [s for s in list1 if s and not any(c in s for c in list2)]
print(result)
Выход
['something']
Понимание списка эквивалентно:
result = []
for s in list1:
if s and not any(c in s for c in list2):
result.append(s)
[x for x in list1 if not any(y in x for y in list2)]
filteredLines
в каждой итерации.