如果两个相同值之间的距离小于 5,如何更新二进制值数组?
How to update an binary values array if the distance between two same values is less than 5?
我正在处理 python 编码中的一个用例。
问题:
我有一个包含二进制值的数组,如 [0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1]
。现在,如果它们(1's)之间的距离小于 5
.
,我必须用两个(1's)之间的 1
替换所有值
例如,第一个1
的索引是4
,第二次出现的1
的索引是7
,所以它们之间的距离两次出现的 1 是 3
,它小于 5
(根据条件)因此,我们将用 1 替换这两个值之间的所有值。
同样,我们必须对数组的每个值都这样做。
示例 : [0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1]
期望的输出:
[0,0,0,0,1,**1,1**,1,**1**,1,0,0,0,0,0,1,**1**,1,1,1,**1,1,1,1**,1,1]
def insert_ones(bit_stream):
new_bit_stream = bit_stream.copy()
last_one_idx = -1
for idx, bit in enumerate(bit_stream):
if last_one_idx == -1:
if bit == 1:
last_one_idx = idx
else:
if bit == 1:
length = idx - last_one_idx
if length < 6:
new_bit_stream[last_one_idx : idx] = [1] * length
last_one_idx = idx
return new_bit_stream
如果您想就地改变流,可以将 new_bit_stream
替换为 bit_stream
我正在处理 python 编码中的一个用例。
问题:
我有一个包含二进制值的数组,如 [0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1]
。现在,如果它们(1's)之间的距离小于 5
.
1
替换所有值
例如,第一个1
的索引是4
,第二次出现的1
的索引是7
,所以它们之间的距离两次出现的 1 是 3
,它小于 5
(根据条件)因此,我们将用 1 替换这两个值之间的所有值。
同样,我们必须对数组的每个值都这样做。
示例 : [0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,1]
期望的输出:
[0,0,0,0,1,**1,1**,1,**1**,1,0,0,0,0,0,1,**1**,1,1,1,**1,1,1,1**,1,1]
def insert_ones(bit_stream):
new_bit_stream = bit_stream.copy()
last_one_idx = -1
for idx, bit in enumerate(bit_stream):
if last_one_idx == -1:
if bit == 1:
last_one_idx = idx
else:
if bit == 1:
length = idx - last_one_idx
if length < 6:
new_bit_stream[last_one_idx : idx] = [1] * length
last_one_idx = idx
return new_bit_stream
如果您想就地改变流,可以将 new_bit_stream
替换为 bit_stream