在列表中查找特定排序序列的实例
Finding instances of specifically ordered sequence in list
假设我们有一个整数列表,如下所示:
ls = [1,5,10,11,12,20,26,31,32,33,34]
- 有没有一种方法可以快速找到列表中 3 个连续整数递增 1 的所有出现(根据它们的索引)?输入列表已经排序。
也就是说,在上面的例子中我们有3个这样的事件,它们的索引是:
[2,3,4]
、[7,8,9]
和 [8,9,10]
对应于元素 [10,11,12]
、[31,32,33]
和 [32,33,34].
这应该有效:
matching = []
for i in range(len(ls)):
sub_ls = ls[i:i+3]
deltas = [nb-sub_ls[_index] for _index, nb in enumerate(sub_ls[1:])]
if deltas == [1, 1]:
matching.append((i, i+1, i+2))
输出:
[(2, 3, 4), (7, 8, 9), (8, 9, 10)]
def check(ls):
for i in range(len(ls)-1):
if ls[i+1] != ls[i] + 1:
return False
return True
result = [[i+j for j in range(3)] for i in range(len(ls)-2) if check(ls[i:i+3])]
备选答案与列表理解!
我想到的最简单的解决方案是遍历 3 个元素子集中的列表并检查条件。
n = 3 #Number of elements in subset of list, in your question it's 3
x = [1,5,10,11,12,20,26,31,32,33,34]
for i in range(len(x)-n+1):
a, b, c = x[i:i+n]
if b-a == c-b == 1:
print('indices->',list(range(i, i+n)), 'values->', x[i: i+n])
输出:
indices-> [2, 3, 4] values-> [10, 11, 12]
indices-> [7, 8, 9] values-> [31, 32, 33]
indices-> [8, 9, 10] values-> [32, 33, 34]
假设我们有一个整数列表,如下所示:
ls = [1,5,10,11,12,20,26,31,32,33,34]
- 有没有一种方法可以快速找到列表中 3 个连续整数递增 1 的所有出现(根据它们的索引)?输入列表已经排序。
也就是说,在上面的例子中我们有3个这样的事件,它们的索引是:
[2,3,4]
、[7,8,9]
和[8,9,10]
对应于元素[10,11,12]
、[31,32,33]
和[32,33,34].
这应该有效:
matching = []
for i in range(len(ls)):
sub_ls = ls[i:i+3]
deltas = [nb-sub_ls[_index] for _index, nb in enumerate(sub_ls[1:])]
if deltas == [1, 1]:
matching.append((i, i+1, i+2))
输出:
[(2, 3, 4), (7, 8, 9), (8, 9, 10)]
def check(ls):
for i in range(len(ls)-1):
if ls[i+1] != ls[i] + 1:
return False
return True
result = [[i+j for j in range(3)] for i in range(len(ls)-2) if check(ls[i:i+3])]
备选答案与列表理解!
我想到的最简单的解决方案是遍历 3 个元素子集中的列表并检查条件。
n = 3 #Number of elements in subset of list, in your question it's 3
x = [1,5,10,11,12,20,26,31,32,33,34]
for i in range(len(x)-n+1):
a, b, c = x[i:i+n]
if b-a == c-b == 1:
print('indices->',list(range(i, i+n)), 'values->', x[i: i+n])
输出:
indices-> [2, 3, 4] values-> [10, 11, 12]
indices-> [7, 8, 9] values-> [31, 32, 33]
indices-> [8, 9, 10] values-> [32, 33, 34]