gpt4 book ai didi

python - 使用大小列表拆分字符串的 pythonic 方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 12:23:30 26 4
gpt4 key购买 nike

实现它的 pythonic 方法是什么:

s = "thisismystring"
keys = [4, 2, 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, 2, 2, 6]
new = []
start = 0
for end in accumulate(keys):
new.append(s[start:end])
start = end

您可以通过添加另一个从零开始的 accumulate() 调用来内联 start 值:

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, 2, 2, 6]
>>> [s[a:b] for a, b in zip(accumulate([0] + keys), accumulate(keys))]
['this', 'is', 'my', 'string']

double accumulate 可以用 tee() 替换,包裹在 pairwise() function from the itertools documentation 中:

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)))]

我输入了一个 itertools.chain() call为 0 起始位置添加前缀,而不是通过连接创建新的列表对象。

关于python - 使用大小列表拆分字符串的 pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42120035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com