Python在字符串之间放置点

时间:2016-07-10 17:42:39

标签: python string

我有一个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

2 个答案:

答案 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不会以最紧凑的内存方式存储字符串。

你问的是不可能的。