如何从给定的一组数字中获取所有连续的数字序列?

How to get all consecutive sequences of numbers from given set of numbers?

我会以例子开始描述问题,这样问题就清楚了。

号码列表:[1,2,3,4]

如何获取每个连续的字符串:[[1],[1,2],[1,2,3],[1,2,3,4],[2] ,[2,3],[2,3,4],[3],[3,4],[4]]

我已经尝试解决这个问题一段时间了,并设法得到 [[1, 2, 3, 4], [2, 3, 4], [3, 4] , [4]] 有很多无用的重复。


list = [1,2,3,4]

i = 0
j = 0
tempList = []
sequancesList = []

while i < len(list):
    while j < len(list):
        tempList.append(list[j])
        sequancesList.append(tempList)
        j += 1
    i += 1
    j = i
    tempList = []

def deleteDuplicates(list):
    noduplist = []
    for element in list:
        if element not in noduplist:
            noduplist.append(element)
    return noduplist

finalSequancesList = deleteDuplicates(sequancesList)

print(finalSequancesList)

操作方法如下:

list = [1,2,3,4]

sequancesList = []

for i in range(len(list)):
    tmp = []
    for j in range(i,len(list)):
        tmp.append(list[j])
        sequancesList.append(tmp[:])

print(sequancesList)

-> [[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [2], [2, 3], [2, 3, 4], [3], [3, 4], [4]]

编辑:如评论中所述,以下方法仅在列表包含完整的升序数字时才有效,而在其他情况下则无效。

有两种方法可以做到这一点,作为嵌套 for-loop 或使用 list-comprehension 的 one-liner。以下两个版本:

嵌套for-loop

nrs = list(range(1,5))
result = []
for i in nrs:
    for j in range(i, max(nrs)+1):
        result.append(list(range(i,j+1)))
print(result)

List-comprehension

result = [list(range(i,j+1)) for i in nrs for j in range(i, max(nrs)+1)]
print(result)

这是一个完全可以做到这一点的生成器:

def iter_successive(input_list):
    for i in range(len(input_list)):
        for j in range(i+1,len(input_list)+1):
            yield input_list[i:j]

>>> list(iter_successive(input_list))
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [2], [2, 3], [2, 3, 4], [3], [3, 4], [4]]

可比较的one-liner解决方案:

def iter_successive(input_list):
    return (input_list[i:j] for i in range(len(input_list))
            for j in range(i+1,len(input_list)+1))