簡體   English   中英

如何從給定的一組數字中獲取所有連續的數字序列?

[英]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 循環或使用列表理解的單行。 以下兩個版本:

嵌套for循環

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)

列表理解

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]]

可比的單線解決方案:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM