gpt4 book ai didi

python - 排列从字符串中删除具有不同长度的已定义子字符串

转载 作者:行者123 更新时间:2023-11-28 22:11:23 25 4
gpt4 key购买 nike

我正在尝试从删除了某些字符子字符串的字符串列表中生成所有排列。我有一个特定化学成分的列表,我想要从该列表中删除其中一个元素的所有成分。此列表的简短摘录如下所示:

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

如您所见,有些长度为两个字符,有些只有一个。

有一个问题询问非常相似的事情,但我的问题更复杂: Getting a list of strings with character removed in permutation

我试着根据我的需要调整代码:

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 的使用经验,所以我非常喜欢使用这些语言的解决方案。

最佳答案

IIUC,你只需要str.replace:

input_list = ['AlCrHfMoNbN', 'AlCrHfMoTaN']
removals = ['Al', 'Cr', 'Hf', 'Mo', 'Nb', 'Ta', 'Ti', 'V', 'W', 'Zr']
result = {}
for i in input_list:
result[i] = [i.replace(r,'') for r in removals if r in i]

输出:

{'AlCrHfMoNbN': ['CrHfMoNbN',
'AlHfMoNbN',
'AlCrMoNbN',
'AlCrHfNbN',
'AlCrHfMoN'],
'AlCrHfMoTaN': ['CrHfMoTaN',
'AlHfMoTaN',
'AlCrMoTaN',
'AlCrHfTaN',
'AlCrHfMoN']}

关于python - 排列从字符串中删除具有不同长度的已定义子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55722223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com