Используйте '|'.join()
, чтобы создать шаблон регулярного выражения из вашего данного списка, с трюком, чтобы отсортировать список с этими заметками, где "#" идет первым в обратном алфавитном порядке
import re
given_list = ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']
given_list= sorted(given_list, reverse=True)
# ['g#', 'g', 'f#', 'f', 'e', 'd#', 'd', 'c#', 'c', 'b', 'a#', 'a']
st="c#cd#e"
new_list = re.findall('|'.join(given_list), st)
print(new_list)
# ['c#', 'c', 'd#', 'e']
РЕДАКТИРОВАТЬ:используйте reverse=True
в sorted(given_list,reverse=True)
, как предложено @ HenryYik