我正在尝试使用以下似乎有效的代码在 Python 中创建 run-len-encoding
from itertools import groupby
a = [0,0,0,1,1,0,1,0,1, 1, 1]
[list(g) for k, g in groupby(a)]
## [[0, 0, 0], [1, 1], [0], [1], [0], [1, 1, 1]]
但是,当我把g
在if
声明中,它消失
[list(g) if len(list(g)) > 0 else 0 for k, g in groupby(a)]
## [[], [], [], [], [], []]
k
另一方面,似乎不受if
声明的影响
[k if k > 0 and k == 1 else 0 for k, g in groupby(a)]
## [0, 1, 0, 1, 0, 1]
我需要g
使用该if
语句提取我正在尝试做的一些未来录音,例如,
import numpy as np
[list(np.repeat(1, len(list(g)))) if len(list(g)) > 1 and k == 1 else list(np.repeat(0, len(list(g)))) for k, g in groupby(a)]
所以我的问题是为什么会发生这种情况(对 Python 来说有点新)并且是否有(我确定有)克服这个问题
编辑
这与问题本身没有直接关系,但我最终在组上rle/inverse.rle
使用for
循环构建了我的groupby
def rle (a):
indx = 0
for k, g in groupby(a):
g_len = len(list(g))
if g_len == 1 and k == 1:
a[indx:(indx + g_len)] = [0]
indx += g_len
让我们举一个最小的例子:
def a():
for i in range(10):
yield i
b = a()
print(list(b))
print(list(b))
输出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]
所以你可以看到你只能调用list
一次生成器。您需要先分配list(g)
给一个变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句