>>> [[seq[i: i + 5] for i in range(j, len(seq), 5) if i + 5 <= len(seq)] for j in range(5)]
[['SDLKF', 'JSOID', 'HFSOD'],
['DLKFJ', 'SOIDH', 'FSODI'],
['LKFJS', 'OIDHF', 'SODIF'],
['KFJSO', 'IDHFS'],
['FJSOI', 'DHFSO']]
import itertools as it
import more_itertools as mit
seq = "SDLKFJSOIDHFSODIF"
size = 5
代码
windows = it.islice(mit.stagger(seq, offsets=range(len(seq)), longest=True), size)
[["".join(x) for x in mit.sliced(w, size) if None not in x and len(x) == size] for w in windows]
通过嵌套列表理解:
虽然单列表理解是更好的答案,但这里有一个^{} 1方法。你知道吗
给定的
代码
输出
细节
目标:制作序列的几个滑动窗口,并将它们分成块。你知道吗
在第一个列表理解中,结果是收缩滑动
windows
。为了演示,下面是一个完整级联结果的示例:注意,对于每个窗口,左侧滑动,而右侧固定。换句话说,每次迭代的窗口大小都会缩小1。这些缩小窗口是通过} 只选择给定
more_itertools.stagger
中的offsets
参数实现的(有关详细信息,请参见the docs)。由于该过程重复,因此通过^{size
的第一个窗口。你知道吗第二种理解是将这些窗口分成一组
size
,丢弃无效的块(< size
或包含fillvalueNone
,这是more_itertools.stagger
中的默认值)。你知道吗1} 安装的第三方库。
more_itertools
是通过^{相关问题 更多 >
编程相关推荐