python 连续出现的长度
python consecutive counts of an occurence with length
这可能真的很容易做到,但我希望计算 python 列表中连续出现正数的长度。例如,我有一个,我正在寻找 return b:
a=[0,0,1,1,1,1,0,0,1,0,1,1,1,0]
b=[0,0,4,4,4,4,0,0,1,0,3,3,3,0]
我在 Counting consecutive positive value in Python array 上注意到一个类似的问题,但这只是 return 的连续计数,而不是所属组的长度。
谢谢
这类似于 run length encoding 问题,因此我从 Rosetta 代码页中借鉴了一些想法:
import itertools
a=[0,0,1,1,1,1,0,0,1,0,1,1,1,0]
b = []
for item, group in itertools.groupby(a):
size = len(list(group))
for i in range(size):
if item == 0:
b.append(0)
else:
b.append(size)
b
Out[8]: [0, 0, 4, 4, 4, 4, 0, 0, 1, 0, 3, 3, 3, 0]
这是一种方法。
基本前提是当在连续的运行个正值中时,它会记住这些正值的所有索引。一旦它达到零,它将回溯并用它们的长度替换所有正值 运行.
a=[0,0,1,1,1,1,0,0,1,0,1,1,1,0]
glob = []
last = None
for idx, i in enumerate(a):
if i>0:
glob.append(idx)
if i==0 and last != i:
for j in glob:
a[j] = len(glob)
glob = []
# > [0, 0, 4, 4, 4, 4, 0, 0, 1, 0, 3, 3, 3, 0]
经过多次尝试终于想出了这两行。
In [9]: from itertools import groupby
In [10]: lst=[list(g) for k,g in groupby(a)]
In [21]: [x*len(_lst) if x>=0 else x for _lst in lst for x in _lst]
Out[21]: [0, 0, 4, 4, 4, 4, 0, 0, 1, 0, 3, 3, 3, 0]
这可能真的很容易做到,但我希望计算 python 列表中连续出现正数的长度。例如,我有一个,我正在寻找 return b:
a=[0,0,1,1,1,1,0,0,1,0,1,1,1,0]
b=[0,0,4,4,4,4,0,0,1,0,3,3,3,0]
我在 Counting consecutive positive value in Python array 上注意到一个类似的问题,但这只是 return 的连续计数,而不是所属组的长度。
谢谢
这类似于 run length encoding 问题,因此我从 Rosetta 代码页中借鉴了一些想法:
import itertools
a=[0,0,1,1,1,1,0,0,1,0,1,1,1,0]
b = []
for item, group in itertools.groupby(a):
size = len(list(group))
for i in range(size):
if item == 0:
b.append(0)
else:
b.append(size)
b
Out[8]: [0, 0, 4, 4, 4, 4, 0, 0, 1, 0, 3, 3, 3, 0]
这是一种方法。
基本前提是当在连续的运行个正值中时,它会记住这些正值的所有索引。一旦它达到零,它将回溯并用它们的长度替换所有正值 运行.
a=[0,0,1,1,1,1,0,0,1,0,1,1,1,0]
glob = []
last = None
for idx, i in enumerate(a):
if i>0:
glob.append(idx)
if i==0 and last != i:
for j in glob:
a[j] = len(glob)
glob = []
# > [0, 0, 4, 4, 4, 4, 0, 0, 1, 0, 3, 3, 3, 0]
经过多次尝试终于想出了这两行。
In [9]: from itertools import groupby
In [10]: lst=[list(g) for k,g in groupby(a)]
In [21]: [x*len(_lst) if x>=0 else x for _lst in lst for x in _lst]
Out[21]: [0, 0, 4, 4, 4, 4, 0, 0, 1, 0, 3, 3, 3, 0]