如何将符合特定条件的列表组合并创建到python中的嵌套列表?

时间:2019-03-12 09:24:28

标签: python-3.x list nested counter

我有两个列表:

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],因此3c[2]开头,并创建了一个新列表,其中连接了[2,2,3]a == 2

所以我的标准是当b[3],b[4],b[5]都与特定值b[i],b[i+1]....相关但它们之间的差距为a时,首先创建一个列表>= 3然后合并其他。我被它卡住了。

1 个答案:

答案 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]]