gpt4 book ai didi

python - 以各种方式替换字符串中的字符

转载 作者:太空狗 更新时间:2023-10-30 01:55:15 25 4
gpt4 key购买 nike

我正在寻找一个函数的帮助,该函数接受一个字符串,并以各种方式替换该字符串中的每个字符。我不太确定如何表达我的问题才有意义,所以我将向您展示它应该做什么。

stars('1')
returns ['*']

stars('12')
returns ['*1', '1*', '**']

stars('123')
returns ['*23', '1*3', '12*', '**3', '*2*', '**1', '***']

stars('1234')
returns ['*234', '1*34', '12*4', '123*', '**34', '*2*4', '*23*', '1**4', '1*3*',
'12**', '***4', '**3*', '*2**', '1***', '****']

这一切都是手工完成的,但即使我犯了错误,你现在应该明白我在寻找什么。最后一个案例(全是 *)不是必需的,但我把它放在那里以确保问题得到理解。

这是我到目前为止的想法,但效果不佳。

def stars(n):
lst = []
length = len(n)
for j in xrange(0, length):
p = list(n)
for k in xrange(j, length):
p[k] = '*'
lst += [''.join(p)]
return lst

输出:

'1' returns ['*']
'12' returns ['*2', '**', '1*']
'123' returns ['*23', '**3', '***', '1*3', '1**', '12*']
'1234' returns ['*234', '**34', '***4', '****', '1*34', '1**4', '1***', '12*4', '12**', '123*']

如有任何帮助,我们将不胜感激。如果可能,希望用 Python 回答这个问题,但如果您不懂 Python,那么伪代码或其他语言也是可以接受的。如果它写得清楚,我相信我可以自己将它转换成 Python。

最佳答案

我认为 Python 中的规范方法是使用 itertools 模块:

>>> from itertools import product, cycle
>>> s = 'abcde'
>>> [''.join(chars) for chars in product(*zip(s, cycle('*')))]
['abcde', 'abcd*', 'abc*e', 'abc**', 'ab*de', 'ab*d*', 'ab**e', 'ab***',
'a*cde', 'a*cd*', 'a*c*e', 'a*c**', 'a**de', 'a**d*', 'a***e', 'a****',
'*bcde', '*bcd*', '*bc*e', '*bc**', '*b*de', '*b*d*', '*b**e', '*b***',
'**cde', '**cd*', '**c*e', '**c**', '***de', '***d*', '****e', '*****']

然后您可以只抛出第一个没有任何星星的,但这可能看起来有点神奇。

ISTM 如果你不想使用内置的笛卡尔乘积函数,你还有其他两种方法:你可以使用递归,或者你可以利用你想要打开和关闭每颗星的事实,a二进制开关。这意味着对于 n 字母,您将有 2^n(-1,如果您删除无星号的情况)返回的可能性,并且是否在某处放置星号对应于是否数字中的相应位已设置(例如,对于“abc”,您将从 1 循环到 7(含),1 = 001 所以您会在最后一个位置放一颗星,7 = 111 所以您会在任何地方放一颗星等)

最后一个实现起来非常简单,所以我会把它留给你。 :^)

关于python - 以各种方式替换字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13274976/

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