您可以使用reduce
andzip
来执行此操作:
In [1]: timeit reduce(lambda s, (i, j): s + string[i:j], zip(start_list, end_list), '')
100000 loops, best of 3: 2.67 μs per loop
这将遍历每(start, stop)
对索引,并将这些索引给定的子字符串连接string
在一起。
同样,您可以使用列表推导式或生成器,并且join
:
In [3]: # generator
In [4]: timeit ''.join( string[i:j] for i, j in zip(start_list, end_list) )
100000 loops, best of 3: 3.43 μs per loop
In [5]: # list comprehension
In [6]: timeit ''.join([ string[i:j] for i, j in zip(start_list, end_list) ])
100000 loops, best of 3: 1.86 μs per loop
最后,您可以使用@gnibbler 的使用字符串切片的答案:
In [7]: #slicing
In [8]: timeit ''.join(map(string.__getslice__, start_list, end_list))
100000 loops, best of 3: 1.82 μs per loop
使用timeit
,最快的方法似乎是使用列表切片和join
,然后join
是列表理解,然后reduce
。