我有一个30个字符的字符串。我需要一次一个地在字符串的每个字符之间放置点,并将其存储为数组 基本上,如果字符串是
'vsuidhfsdfiuheu093ruuweorufdsi'
数组将具有以下值:
'v.suidhfsdfiuheu093ruuweorufdsi'
'v.s.uidhfsdfiuheu093ruuweorufdsi'
'v.s.u.i.dhfsdfiuheu093ruuweorufdsi'
'v.suid.hfsd.fi.uheu.093ruuweoruf.dsi'
[and a lot more]
彼此不能有两个点,例如v..s.uidhfsdfiuheu093ruuweorufdsi
答案 0 :(得分:1)
包含所有可能组合的列表将非常庞大且无用。实际上,对于长度为N的单词,有2个 N - 1 点位置可能性。
你可以使用生成器:迭代仍然会很慢,但你不会冒着遇到内存问题的风险。
我建议您使用itertools.product()
生成所有点组合,然后将它们插入到单词中:
from itertools import product
word = "vsuidhfsdfiuheu093ruuweorufdsi"
for prod in product((".", ""), repeat=len(word) - 1):
mixed = [char for tpl in zip(word, prod + ("",)) for char in tpl]
new_word = "".join(mixed)
print(new_word)
答案 1 :(得分:0)
30个字符的字符串有sum(nCr(30, i) for i in range(30)) = 1,073,741,823
种可能的点组合(29个可能的空格用于放置点)。如果我们假设每个输出字符串长30个字节(低估,因为字符串可能长达两倍,取决于您插入的点数),这意味着以最有效的方式存储,您仍然需要32,212,254,690字节的存储空间才能包含它。这意味着您需要 绝对最小 32 GB的RAM 才能运行此类程序。在实践中几乎肯定很多次,因为所有字符串都将超过30个字符,并且出于性能原因,python不会以最紧凑的内存方式存储字符串。
你问的是不可能的。