Python在移动窗口中拆分字符串
我有一个包含数字的字符串,比如说 digit = "7316717"
现在我想把这个字符串分割成每次3个数字一组的方式。这样我就能得到:
["731", "316", "167", "671", "717"]
那么该怎么做呢?最简单的方法是用一个循环来逐个处理。但我觉得Python里面有一些内置的字符串函数可以用更少的代码来实现这个功能。你知道有什么方法吗?
5 个回答
3
在itertools 文档中,有一个非常不错的做法叫做 pairwise
。
我对这个做法进行了些许更新,以适应组内有 n
个元素的情况,写了以下代码:
from itertools import tee, izip
def window(iterable, n):
els = tee(iterable, n)
for i, el in enumerate(els):
for _ in xrange(i):
next(el, None)
return izip(*els)
print(["".join(i) for i in window("2316515618", 3)])
Python 2.7
12
在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、数据库或者其他程序。为了让程序能更好地理解这些数据,我们通常会对它们进行一些处理,比如转换格式、清理无用信息等。
在这个过程中,可能会遇到一些问题,比如数据格式不对、缺少必要的信息,或者数据之间不兼容。这些问题会导致程序运行出错,或者得到不正确的结果。
为了避免这些问题,我们可以采取一些措施,比如在处理数据之前先检查它们的格式,确保它们符合我们的要求。此外,使用一些工具或者库来帮助我们处理数据,也能大大简化这个过程。
总之,处理数据是编程中非常重要的一部分,掌握一些基本的处理技巧,可以让我们的程序更加稳定和可靠。
>>> s = "7316717"
>>> [s[i:i+3] for i in range(len(s)-2)]
['731', '316', '167', '671', '717']
14
itertools 示例中提供了一个叫做 window
的函数,它正是用来实现这个功能的:
from itertools import islice
def window(seq, n=2):
"Returns a sliding window (of width n) over data from the iterable"
" s -> (s0,s1,...s[n-1]), (s1,s2,...,sn), ... "
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result
使用示例:
>>> ["".join(x) for x in window("7316717", 3)]
['731', '316', '167', '671', '717']