如果两个元素彼此相邻,则在 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]
如何根据相邻元素拆分列表,所以如果我有一个列表,例如
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]