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']
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)))]
[s[sum(keys[:i]): sum(keys[:i]) + k] for i, k in enumerate(keys)]
以您的例子:
>>> s = "thisismystring"
>>> keys = [4, 2, 2, 6]
>>> new = [s[sum(keys[:i]): sum(keys[:i]) + k] for i, k in enumerate(keys)]
>>> new
['this', 'is', 'my', 'string']
您可以使用^{} ,也许:
您可以通过添加另一个从零开始的
accumulate()
调用来内联start
值:此版本可制成列表:
后一版本的演示:
双累积可以用} function from the ^{} documentation 中:
tee()
替换,包装在^{我加入了一个^{} call 作为0起始位置的前缀,而不是用连接创建一个新的list对象。你知道吗
我会用
enumerate
来表示这一点,加上:以您的例子:
可能使用
islice
。可能效率不高,但至少有趣和简单。你知道吗相关问题 更多 >
编程相关推荐