【问题标题】:Split string by n when n is random当 n 是随机的时,将字符串拆分为 n
【发布时间】: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 我已经推翻了我的投票。对不起,我不能做更多。不过,这是未来问题的一个很好的模板。

标签: python split slice


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多