当 n 是随机的时,将字符串拆分为 n
Posted
技术标签:
【中文标题】当 n 是随机的时,将字符串拆分为 n【英文标题】:Split string by n when n is random 【发布时间】:2015-11-19 16:31:38 【问题描述】:当每个切片的 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
【问题讨论】:
你的意思是像pastebin.com/0hz0e7BQ @Aurora 是你不懂,你不懂的是站内规则。您编写代码,遇到特定问题,也许我们可以提供帮助。但是“我想做这件事,但我对如何做这件事一无所知”只是要求有人免费为您编写代码。这不是我们在这里所做的。这可能不是任何人在任何地方都会做的事情。 这并非完全不合逻辑。它可以帮助我们调整您的代码,使其能够正常工作。总而言之,它将帮助您查明您在哪里以及如何犯错。如果代码太糟糕并且无法调整,那么它表明您至少已经进行了一次可靠的尝试。 "我完全理解网站规则。"从你 -8 的问题得分、4 票接近的投票以及 cmets 中的巨大争论来看,我可能建议你再读一读。 @Aurora 我已经推翻了我的投票。对不起,我不能做更多。不过,这是未来问题的一个很好的模板。 【参考方案1】:这个生成器可以解决问题:
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']
【讨论】:
我必须给它赋值吗?我希望它按一个随机值拆分它,并且每个拆分都会随机生成。因此,它会生成一个随机数,比如 n,然后获取字符串的下 n 个字符,并为 n 生成另一个值,依此类推。 @Aurora 你仍然可以这样做!你只需要制作一个随机数生成器!我添加了代码来说明这一点:) 这似乎可行,而且它是一个比我的更优雅的解决方案。稍后我会在使用 PC 时对其进行测试。【参考方案2】:我想通了。
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”的多行字符串拆分为bash中的字符串数组? [复制]
将二进制字符串拆分为长度为 n 的子字符串,然后解码 R 中的每个子字符串
Pandas使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数设置expand参数将拆分结果列表内容转化为多列dataframe