我有两个列表:
a = [0,0,2,2,2,2]
b = [1,3,2,3,6,7]
A和b彼此相关,a[i]
与b[i]
相关,我想得到
c = [[0,1,3],[2,2,3],[2,6,7]]
当a
= 0
时,b
中有2个与0
相关的值为b[0],b[1]
,因此将它们连接为第一个内部c
,
当a
= 2
时,与2
相关的4个值是b[2],b[3],b[4],b[5]
,但b[3]
与{{1 }}大于b[4]
,因此3
以c[2]
开头,并创建了一个新列表,其中连接了[2,2,3]
和a == 2
所以我的标准是当b[3],b[4],b[5]
都与特定值b[i],b[i+1]....
相关但它们之间的差距为a
时,首先创建一个列表>= 3
然后合并其他。我被它卡住了。
答案 0 :(得分:0)
首先根据a
创建组:
c = zip(a, b)
c = {k: [bi for ai, bi in g] for k, g in groupby(c, lambda i: i[0])}
现在连接到列表列表(按顺序):
c = [v for k, v in sorted(c.items())]
现在,您需要一个按价值差距划分的函数:
def split_max_gap(l, max_gap=2):
acc = [l[0]]
for x, y in zip(l, l[1:]):
if abs(x - y) > max_gap:
yield acc
acc = [y]
continue
acc.append(y)
if acc:
yield acc
将拆分应用于列表的上一个列表:
c = map(split_max_gap, c)
扁平:
c = list(chain.from_iterable(c))
c
现在应该保持:
[[1, 3], [2, 3], [6, 7]]