0

私は2つのリストを持っていました:

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値が 2 つあるため、それらを の最初の内部リストとして接続します。b0b[0],b[1]c

a=のとき2、 に関連する値は ,2の4 つですが、とb[2],b[3],b[4],b[5]の間のギャップが よりも大きいので、として停止し、 と を接続した新しいリストを作成します。b[3]b[4]3c[2][2,2,3]a == 2b[3],b[4],b[5]

したがって、私の基準は、b[i],b[i+1]....両方が特定の値に関連してaいるが、ギャップがある場合です。最初>= 3にリストを作成してから、他のリスト[a[i],b[i]]を結合します。私はそれに行き詰まりました。

4

2 に答える 2

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]]
于 2019-03-12T09:55:23.587 に答える