[英]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.