Py学习  »  Python

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

wayne64001 • 5 年前 • 1444 次点击  

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 0个 b[0],b[1] ,因此将它们作为 c ,

2 ,有4个值与 2个 b[2],b[3],b[4],b[5] ,但是 b[3] b[4] 3 ,所以 c[2] [2,2,3] 并创建一个新列表 a == 2 b[3],b[4],b[5]

所以我的标准是 b[i],b[i+1].... 两者都与 但是他们有一个差距 >= 3 ,创建列表 [a[i],b[i]]

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/55435
 
1444 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Camile
Reply   •   1 楼
Camile    6 年前

你写的

b[3]和b[4]之间的间隙大于3

但不是更大。它是更大的或相等的。

a = [0, 0, 2, 2, 2, 2]
b = [1, 3, 2, 3, 6, 7]
c = []

for s in set(a):
    i = a.index(s)
    count = a.count(s)
    pom = []

    for j in range(i, i + count):
        if not pom:
            pom.append(b[j])
        elif abs(pom[-1] - b[j]) < 3:
                pom.append(b[j])
                if j + 1 == count:
                    pom.insert(0, s)
                    c.append(pom)
                    pom = []
                else:
                    pom.insert(0, s)
                    c.append(pom)
                    pom = [b[j]]

print(c)
Reut Sharabani
Reply   •   2 楼
Reut Sharabani    6 年前

首先根据 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]]