У меня есть объект типа list и второй объект типа string.Я хотел бы отфильтровать все значения в объекте списка, которые не соответствуют значению объекта строки.
Я создал цикл, который разбивает список на строки и с помощью регулярных выражений находит все не соответствующиеи добавил эти результаты в новый список.В этом примере используются имена хостов "ma-tsp-a01", "ma-tsp-a02" и "ma-tsp-a03".В настоящее время я продолжаю работу над этим новым списком, чтобы создать чистый список имен хостов.
import re
local_hostname = 'ma-tsp-a01'
profile_files = ['/path/to/file/TSP_D01_ma-tsp-a01\n', \
'/path/to/file/TSP_D02_ma-tsp-a02\n', \
'/path/to/file/TSP_ASCS00_ma-tsp-a01\n', \
'/path/to/file/TSP_DVEBMGS03_ma-tsp-a03\n', \
'/path/to/file/TSP_DVEBMGS01_ma-tsp-a01\n']
result_list = [local_hostname]
for list_obj in profile_files:
if re.search(".*\w{3}\_\w{1,7}\d{2}\_(?!"+local_hostname+").*", list_obj):
result_list.append(list_obj.split("/")[-1].splitlines()[0].\
split("_")[-1])
print(result_list)
В конце я получаю следующий вывод ['ma-tsp-a01', 'ma-tsp-a02', 'ma-tsp-a03']
.Это выглядит именно то, что я ищу.Но есть ли способ сделать это более питоническим способом без цикла for?