如果两个元素彼此相邻,则在 Python 中拆分列表

Splitting list in Python if two elements are next to each other

如何根据相邻元素拆分列表,所以如果我有一个列表,例如

test = [3,5,7,1,10,17]

如果元素 10 和 17 彼此相邻,我想拆分列表,以便拆分发生在 [3,5,7,1][10,17] 之间。

我知道有 groupby 但我只能弄清楚如何使用它来检查一个元素是否存在然后拆分,而不是两个一个接一个。

伪代码:

for i in list:
      if element[i] == 10 and element[i+1] == 17:
                  splitlist() # split before elements 10

您可以 zip() 带有自身偏移量的列表来获取对。然后找到您正在寻找的对的索引(假设这种情况发生一次或者您只关心第一个)。然后拼接列表:

test = [3,5,7,1,10,17]

def partition_on_pair(test, pair):
    index = next((i for i, n in enumerate(zip(test, test[1:])) if n == pair), len(test))
    return test[:index], test[index:]

partition_on_pair(test, (10, 17))
# ([3, 5, 7, 1], [10, 17])

partition_on_pair(test, (10, 19)) # doesn't exist, so you get an empty
#([3, 5, 7, 1, 10, 17], [])


partition_on_pair(test, (5, 7))
#([3], [5, 7, 1, 10, 17])

partition_on_pair(test, (3,5))
#([], [3, 5, 7, 1, 10, 17])

这是一个基于您的输出的示例:

def split_list(test, match):
    idx = [test.index(i) for i in match]
    if sum([i - min(idx) for i in idx]) == sum(range(len(match))
        return [
            test[0:idx[0]],
            test[idx[0]:idx[-1]+1]
        ]

split_list(test=[3, 5, 7, 1, 10, 17], match=[10, 17])

这是一个简单的工作代码:

test = [3,5,7,1,10,17]

def neighbor_splitting():
    for x in test:
        if x == 10:
            index = test.index(x)
            list1 = test[:index]
            list2 = test[index:]
            return list1, list2

# [3, 5, 7, 1]
# [10, 17]