Я пытаюсь сгенерировать все перестановки из списка строк, в которых удалены определенные подстроки символов.У меня есть список определенных химических составов, и я хочу, чтобы все составы были получены из этого списка, где один из этих элементов удален.Краткая выдержка из этого списка выглядит так:
AlCrHfMoNbN
AlCrHfMoTaN
AlCrHfMoTiN
AlCrHfMoVN
AlCrHfMoWN
...
Я пытаюсь получить
AlCrHfMoNbN --> CrHfMoNbN
AlHfMoNbN
AlCrMoNbN
AlCrHfNbN
AlCrHfMoN
AlCrHfMoTaN --> CrHfMoTaN
AlHfMoTaN
AlCrMoTaN
AlCrHfTaN
AlCrHfMoN
для каждой композиции.Мне просто нужен правильный столбец.Как видите, некоторые из полученных композиций являются дубликатами, и это предназначено.Список элементов, которые необходимо удалить:
Al, Cr, Hf, Mo, Nb, Ta, Ti, V, W, Zr
Как видите, некоторые имеют длину два символа, а некоторые только один.
Есть вопрос, который задает что-то очень похожее, однако моя проблема более сложна: Получение списка строк с символом, удаленным в перестановке
Я попытался настроитькод для моих нужд:
def f(s, c, start):
i = s.find(c, start)
return [s] if i < 0 else f(s, c, i+1) + f(s[:i]+s[i+1:], c, i)
s = 'AlCrHfMoNbN'
print(f(s, 'Al', 0))
Но этот простой подход приводит только к ['AlCrHfMoNbN', 'lCrHfMoNbN']
.Таким образом, удаляется только один символ, тогда как мне нужно удалить определенную строку символов различной длины.Кроме того, я ограничен одним входным объектом s
- вместо сотен, которые мне нужно обработать - поэтому циклический переход вручную не возможен.
Подводя итог, нужноизменить код, который позволяет:
- ввести список строк, разделенных переносами строк или пробелами
- удалить из этого списка подстроки символов, которые определены вторым списком (простокак указано выше)
- записывает результирующие «уменьшенные» элементы в непрерывном списке, предпочтительно в виде одного столбца без запятых, например
Поскольку у меня есть только некоторый опыт работы с Python и Bash IНастоятельно предпочитаю решение с этими языками.