Подобно ответу @ ExplodingGayFi sh, но я применяю groupby
в обоих списках одновременно и использую функциональный подход для вычисления ИЛИ.
from functools import reduce
from itertools import groupby
from operator import or_
def fn(l1, l2):
result = []
# group both lists by the values in l1
for key, group in groupby(zip(l1, l2), key=lambda x: x[0]):
# extract values from l2
group_from_l2 = [x[1] for x in group]
if key == 1:
# bitwise OR of all values in group_from_l2
result.append(reduce(or_, group_from_l2))
else:
# group_from_l2 unchanged
result.extend(group_from_l2)
return result
>>> fn([1, 1, 0, 1, 1, 1, 1], [0, 0, 0, 1, 0, 0, 0])
[0, 0, 1]
>>> fn([1, 1, 0, 0, 1, 1, 0, 0], [0, 1, 1, 0, 1, 1, 0, 1])
[1, 1, 0, 1, 0, 1]