当 n 是随机的时将字符串拆分为 n

Split string by n when n is random

我正在尝试按 n 拆分一个字符串,而 n 对于每个切片都是随机的。因此,程序将生成 n,获取字符串的前 n 个字符并将它们附加到列表中,为 n 生成一个新值,然后获取字符串的下 n 个值并重复。

我现有的代码没有按预期工作:

string = '1234567890'
splitted = []

prev = 0
while True:
    n = random.randint(1,3)
    splitted.append(string[0:n])
    prev = prev + n
    if prev >= len(string)-1:
        break
print splitted

这个生成器可以解决问题:

def randSplit(word, splits):
    for splitLen in splits:
        if splitLen > len(word):
            break
        yield word[:splitLen]
        word = word[splitLen::]

您可以像这样使用它:

>>> print(list(randSplit("3.14159",[1,4,2])))
['3', '.141', '59']
>>> print(list(randSplit("3.14159",[1,4,3])))
['3', '.141']

注意 splits 可以是任何迭代器。如果你想采用随机分割长度,你可以使用这个迭代器:

def randGen(low,hi):
    while True:
        yield random.randint(low,hi)

您可以像这样使用它:

>>> print(list(randSplit("1234567890",randGen(1,3))))
['123', '4', '5', '67', '89']
>>> print(list(randSplit("1234567890",randGen(1,3))))
['123', '456', '78', '9', '0']

我想通了。

string = '123456789'
splitted = []

prev = 0
while True:
    n = random.randint(1,3)
    splitted.append(string[prev:prev+n])
    prev = prev + n
    if prev >= len(string)-1:
        break
print splitted