将一个字符串拆分为N个部分

时间:2014-07-09 10:16:27

标签: python string algorithm logic

给定一个数字N和一个字符串,我需要将字符串拆分为完全 N个字符。

例如,如果N = 3

  • abcd - > [“ab”,“c”,“d”]
  • abcde - > [“ab”,“cd”,“e”]
  • abcdef - > [“ab”,“cd”,“ef”]
  • abcdefg - > [“abc”,“de”,“fg”]

实现这一目标的最佳方式是什么(最好是在python中)?

我当前(工作不够好)的解决方案是

chunkSize = int(ceil(len(myString) / float(numOfChunks)))
chunks = [myString[i:i+chunkSize ] for i in range(0, len(myString), chunkSize )]

2 个答案:

答案 0 :(得分:6)

将输入序列划分为偶数块的生成器:

def split_into(s, n):
    size, remainder = divmod(len(s), n)
    start = 0
    for i in range(n):
        length = size + (i < remainder)
        yield s[start:start + length]
        start += length

这使用boolintTrue == 1的子类这一事实。

演示:

>>> list(split_into('abcd', 3))
['ab', 'c', 'd']
>>> list(split_into('abcde', 3))
['ab', 'cd', 'e']
>>> list(split_into('abcdef', 3))
['ab', 'cd', 'ef']
>>> list(split_into('abcdefg', 3))
['abc', 'de', 'fg']
>>> list(split_into('abcdefgh', 3))
['abc', 'def', 'gh']

答案 1 :(得分:0)

这是伪代码。我不懂Python,但可能作为通用算法很有用。

RegLen <- Int(Len(Str)/N)   # The integer portion only
FirstLen = Len(Str) - N * RegLen
# Output goes into Output[] array of length N elements, each a substring

Output[1] = Left(Str, FirstLen)

For i <- 2 to N
   StartPosition <- FirstLen + (i-2) * RegLen + 1
   Output[i] <- Mid(Str, StartPosition, RegLen)
Loop