我有以下问题:我正试图创建所谓的“digrams”,如下所示:
如果我有一个单词foobar,我想得到一个列表或一个类似于:["fo", "oo", "ob", "ba", "ar"]的生成器。完美的功能是more_itertools.windowed。问题是,它返回元组,如下所示:

In [1]: from more_itertools import windowed

In [2]: for i in windowed("foobar", 2):
   ...:     print(i)
   ...:
('f', 'o')
('o', 'o')
('o', 'b')
('b', 'a')
('a', 'r')

当然,我知道我可以.join()他们,所以我会:
In [3]: for i in windowed("foobar", 2):
   ...:     print(''.join(i))
   ...:
   ...:
fo
oo
ob
ba
ar

我只是想知道itertoolsmore_itertools中是否有一个函数,我看不出它能做到这一点。还是有一种更“蟒蛇式”的手工方式?

最佳答案

您可以使用切片编写自己的widowed版本。

def str_widowed(s, n):
    for i in range(len(s) - n + 1):
        yield s[i:i+n]

这将确保生成的类型与输入相同,但不再接受未索引的iterable。

关于python - Python加入more_itertools.windowed结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55564709/

10-10 12:45