【每日一题0805】字符串分片

:woman_mage:已知一个字符串和一个正整数 n,请编写一个python函数,将字符串拆分成长度为 n 的部分,然后在列表中返回它们。最后一个元素少于 n 个字符是可以的。如果 n 不是一个有效的大小(> 0 )(或不存在) ,则应返回一个空列表。
示例:

输入:‘hogwarts’, 2
输出:[‘ho’, ‘gw’, ‘ar’, ‘ts’]

输入:‘hello world’, 3
输出:[‘hel’, 'lo ', ‘wor’, ‘ld’]

题目难度:简单
题目来源:codewars

def string_chunk(word, n):
    pass
    
assert string_chunk('hogwarts', 2) == ['ho', 'gw', 'ar', 'ts']
assert string_chunk('thiskataeasy', 4) == ['this', 'kata', 'easy']
assert string_chunk('hello world', 3) == ['hel', 'lo ', 'wor', 'ld']
assert string_chunk('sunny day', 0) == []

def string_chunk(word, n):
    start = 0
    end = n
    res = []
    while start <= len(word) :
        res.append(word[start:end])
        start = end
        end += n
    return res


assert string_chunk('hogwarts', 2) == ['ho', 'gw', 'ar', 'ts']
assert string_chunk('thiskataeasy', 4) == ['this', 'kata', 'easy']
assert string_chunk('hello world', 3) == ['hel', 'lo ', 'wor', 'ld']
assert string_chunk('sunny day', 0) == []

image

def string_chunk(word:str,n:int):
    if n==0:
        return []
    res = []
    s = word
    for i in range(len(word)):
        if (i+1)%n==0:
            res.append(s[:n])
            s=word[(i+1):]
            if len(s)<n and len(s)>0:
                res.append(s)
    return res

参考题解

def string_chunk(string, n):
    return [] if n == 0 else [string[i:i+n] for i in range(0, len(string), n)]

assert string_chunk('hogwarts', 2) == ['ho', 'gw', 'ar', 'ts']
assert string_chunk('thiskataeasy', 4) == ['this', 'kata', 'easy']
assert string_chunk('hello world', 3) == ['hel', 'lo ', 'wor', 'ld']
assert string_chunk('sunny day', 0) == []

解题思路:利用python序列的切片知识,对输入的字符串按照一定的步长进行分割切片。
切片操作基本表达式:object[start_index : end_index : step]。

1. start_index
表示起始索引(包含该索引本身);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。
2. end_index
表示终止索引(不包含该索引本身);该参数省略时,表示一直取到数据”端点“,至于是到”起点“还是到”终点“,同样由step参数的正负决定,step为正时直到”终点“,为负时直到”起点“。
3. step
正负数均可,其绝对值大小决定了切取数据时的“步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。
1 Like