I am jumbling with one usecase in python coding.
Question:
I have an array having binary values like [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]
. Now I have to replace all the values by 1
in between two ones (1's) if the distance between them (1's) is less than 5
.
For example, The index of the first 1
is 4
and the index of the second times occurrence of 1
is 7
, so the distance between these two occurrences of 1's is 3
which is less than 5
(as per condition) therefore, We will replace all the values in between these two ones by 1.
Similarly, we have to do it for each value of the array.
Example : [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]
Desired output :
[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]
CodePudding user response:
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
You can replace new_bit_stream
with bit_stream
if you want to mutate the stream in place