当 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
我正在尝试按 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