我正在实现将对象融合在一起的本地优化。在最简单的形式中,给出一个列表:
[0, 3, 5, 8, 1, 2, 9, 0, 3, 5]
我想分组:
[[0, 3], 5, 8, 1, 2, 9, [0, 3], 5]
基于提供的标准:
def is_group(a, b):
return a == 0 and b == 3
我目前的解决方案似乎有点复杂,我正在寻找大多数pythonic方法:
def pairwise(iterable):
for (a, b) in zip(iterable, iterable[1:]):
yield (a, b)
yield (iterable[-1], None) # handle edge case
def fuse(ops):
ops_new = []
skip_next = False
for (a, b) in pairwise(ops):
if is_group(a, b):
ops_new.append([a, b])
skip_next = True
elif skip_next:
skip_next = False
elif:
ops_new.append(a)
我看过groupby
,这是最接近的,但不太确定如何使它工作,因为这里的标准取决于成对参数。
编辑:提出问题的另一种方式是我基本上尝试进行模式搜索并替换为列表(例如regex
列表)。
答案 0 :(得分:1)
自定义 isolate_group
功能:
def isolate_group(pair, l):
result = []
idx_skip = -1
for i in range(len(l)):
if i == idx_skip:
continue
if l[i:i+2] == pair:
result.append(l[i:i+2])
idx_skip = i+1
else:
result.append(l[i])
return result
测试1:
print(isolate_group([0,3], [0, 3, 5, 8, 1, 2, 9, 0, 3, 5]))
输出:
[[0, 3], 5, 8, 1, 2, 9, [0, 3], 5]
测试2:
print(isolate_group([0,3], [0, 3, 5, 8, 0, 3, 9, 5, 0, 3]))
输出:
[[0, 3], 5, 8, [0, 3], 9, 5, [0, 3]]