已知一个字符串和一个正整数 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) == []
fwj
(fwj)
2021 年8 月 6 日 03:21
4
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 个赞