我已經看到,扁平整數與串列作為唯一的引數嵌套串列(代碼第一個片段)幾個答案:flatten(lst)。我的任務是做同樣的事情,但有兩個指數(低 <= 高)表示要考慮的指數范圍:flatten(lst, low, high).
帶一個引數的作業代碼
def flatten(lst):
if not lst:
return lst
if isinstance(lst[0], list):
return flatten(lst[0]) flatten(lst[1:])
return lst[:1] flatten(lst[1:])
我用列印陳述句測驗了我的代碼,并且展平程序是正確的,問題是我不確定如何將所有單個值放回串列中以回傳它。希望這是有道理的,我不知道還有什么可以嘗試的。先感謝您!
我的代碼
def flatten(lst, low, high):
if low > high:
return lst
elif isinstance(lst[low], list):
return flatten(lst[low], 0, len(lst[low]) - 1) flatten(lst[low 1:], 0, len(lst[low 1:]) - 1)
else:
return lst[:low] flatten(lst[low 1:], 0, len(lst[low 1:]) - 1)
這是我用來測驗我的代碼的內容。
print(flatten([[1, 2], 3, [4, [5, 6, [7], 8]]], 0, 2))
uj5u.com熱心網友回復:
我認為您應該首先將整個串列展平(沒有低和高指數)。然后按低索引和高索引回傳扁平串列的子串列。
也許你可以在 flatten 中定義另一個函式。這是我的解決方案
def flatten(lst, low, hight):
def flatten_entire_list(lst):
if not lst:
return lst
if isinstance(lst[0], list):
return flatten_entire_list(lst[0]) flatten_entire_list(lst[1:])
return lst[:1] flatten_entire_list(lst[1:])
flattened_list = flatten_entire_list(lst)
return flattened_list[low: hight]
uj5u.com熱心網友回復:
您可以按原樣使用帶有下標賦值的原始函式:
def flatten(lst):
if not lst:
return lst
if isinstance(lst[0], list):
return flatten(lst[0]) flatten(lst[1:])
return lst[:1] flatten(lst[1:])
L = [[1, 2], 3, [4, [5, 6, [7], 8]]]
L[0:2] = flatten(L[0:2])
print(L)
[1, 2, 3, [4, [5, 6, [7], 8]]]
或者實作一個使用第一個函式的新函式:
def flattenRange(L,low,high):
L = L.copy()
L[low:high] = flatten(L[low:high]) # use high 1 if it is inclusive
return L
甚至“混蛋”,......我的意思是“增強”原版:
def flatten(lst,low=0,high=None):
if low>0 or high is not None:
lst = lst.copy()
lst[low:high] = flatten(lst[low:high]) # use high 1 if it's inclusive
return lst
if not lst:
return lst
if isinstance(lst[0], list):
return flatten(lst[0]) flatten(lst[1:])
return lst[:1] flatten(lst[1:])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/334071.html
