使用大小列表拆分字符串的pythonic方法是什么?
发布时间:2020-12-20 12:33:53 所属栏目:Python 来源:网络整理
导读:实现这个的 pythonic方法是什么: s = "thisismystring"keys = [4,2,6]new = []i = 0for k in keys: new.append(s[i:i+k]) i = i+k 这确实给了我[‘this’,’is’,’my’,’string’],但是我觉得这是一种更优雅的方式.建议? 解决方法 您可以使用 itertools.
实现这个的
pythonic方法是什么:
s = "thisismystring" keys = [4,2,6] new = [] i = 0 for k in keys: new.append(s[i:i+k]) i = i+k 这确实给了我[‘this’,’is’,’my’,’string’],但是我觉得这是一种更优雅的方式.建议? 解决方法
您可以使用
itertools.accumulate() ,也许:
from itertools import accumulate s = "thisismystring" keys = [4,6] new = [] start = 0 for end in accumulate(keys): new.append(s[start:end]) start = end 您可以通过添加从零开始的另一个accumulate()调用来内联起始值: for start,end in zip(accumulate([0] + keys),accumulate(keys)): new.append(s[start:end]) 这个版本可以制成列表理解: [s[a:b] for a,b in zip(accumulate([0] + keys),accumulate(keys))] 演示后者版本: >>> from itertools import accumulate >>> s = "thisismystring" >>> keys = [4,6] >>> [s[a:b] for a,accumulate(keys))] ['this','is','my','string'] 双重累积可以用T恤()代替,包裹在 from itertools import accumulate,chain,tee def pairwise(iterable): "s -> (s0,s1),(s1,s2),(s2,s3),..." a,b = tee(iterable) next(b,None) return zip(a,b) [s[a:b] for a,b in pairwise(accumulate(chain([0],keys)))] 我在 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |