python - 在 Python 中将某个字符添加到字符串(对于每个可能的组合)
问题描述
例如,如果我有一个字符串helloWorld
和一个字符,我想要那个#
该程序会吐出这些:
h#elloworld , he#lloworld , ...
依此类推,但随后会跳转到两个#:
h#e#lloworld , h#el#loworld, ...
然后它跳到三个#,依此类推..
但不允许有两个或多个连续的#,字符串前后不能有#。只在中间。
这些是不允许的:#he#llo#wor#ld
因为它在实际字符串之前有一个 # 。
he##llowor#ld
因为它有 2 个连续的 # 并且也是he#llo#wor#ld#
不允许的,因为它在实际字符串后面有一个井号标签..
这让我想了很多,我不太明白如何想出一个程序,我尝试了这个:
def eachOptChar(str, c):
from math import comb
listOfOpts = []
l = len(str)
for i in range(1, l-1):
for j in range(1, l - 1):
combL = comb(i, j)
for _ in range(combL):
listOfOpts.append(str[:i] + c + str[i + 1:])
j+=1
return listOfOpts
我的想法:我尝试使用组合数学,首先我选择要放置多少个字符,然后将其添加到字符串并附加到列表中。但它只提出了一个#的解决方案(而且很多时候......)
有没有优雅的方法呢?谢谢!
我会很感激你的帮助,谢谢!
解决方案
更新#2:这个简短的脚本生成满足所述约束的所有可能排列。
为了帮助理解脚本现在可以工作,打印“二进制”变量的值并查看它与“行”变量的关系。另请注意,“i”始终是偶数,以防止添加“。” 在行尾。(我几乎是盲人,所以我使用了一个点,我发现它更容易与磅符号区分开来。)
享受!
def foo(str, c):
length = len(str)
for n in range(0, 2**length, 2):
binary = f'{n:{length}b}'
line = ''
for i in range(length):
line += str[i]
if binary[i] == '1':
line += c
print(line)
foo('Hello', '.')
输出
Hello
Hell.o
Hel.lo
Hel.l.o
He.llo
He.ll.o
He.l.lo
He.l.l.o
H.ello
H.ell.o
H.el.lo
H.el.l.o
H.e.llo
H.e.ll.o
H.e.l.lo
H.e.l.l.o
更新:copy.copy() 被删除,因为它不需要。
此代码将执行您似乎描述的操作,但它不会在给定字符串中生成“#”字符的所有可能组合!
脚本:
def insert_char(c, string, index):
return string[:index] + c + string[index:]
def do(str, c, n):
l = len(str)
for i in range(n, l):
new = insert_char(c, str, i)
print(new)
if i == n:
first = new
return first
str = 'Hello World'
l = len(str)
for i in range(1, 2*l-1, 2):
str = do(str, '.', i)
输出:
H.ello World
He.llo World
Hel.lo World
Hell.o World
Hello. World
Hello .World
Hello W.orld
Hello Wo.rld
Hello Wor.ld
Hello Worl.d
H.e.llo World
H.el.lo World
H.ell.o World
H.ello. World
H.ello .World
H.ello W.orld
H.ello Wo.rld
H.ello Wor.ld
H.ello Worl.d
H.e.l.l.o. World
H.e.l.l.o .World
H.e.l.l.o W.orld
...
H.e.l.l.o. .W.o.rld
H.e.l.l.o. .W.or.ld
H.e.l.l.o. .W.orl.d
H.e.l.l.o. .W.o.r.ld
H.e.l.l.o. .W.o.rl.d
H.e.l.l.o. .W.o.r.l.d
推荐阅读
- python - 根据条件获取最早的pandas列的值
- c - 将一个 Methode 的变量结果调用到另一个 Methode 以在 C 中使用它
- angular - 如何从 api 预加载角度分量数据
- spring - 如何在 Spring 启动时请求 Array 中包含的 body 对象文件
- r - 如何在闪亮中指定具有不同样式的不同单选按钮?
- c# - 从包含的 ObjectB 访问 ObjectA 的成员
- jsbin - jsbin - 是否可以更改快捷方式?
- java - 将 Firebase 中的数据显示到自定义信息窗口中
- c# - ftp 发布 vs 文件夹发布和使用 FTP 程序上传
- javascript - 关闭 Ant Design 面板 onClick 后自动折叠