我的問題是創建一個在串列中迭代串列的函式,并具有這樣的代碼,如果我繼續在該串列中引入另一個串列,它仍然會迭代回傳一個串列,例如flatten_list([5, [4, 3, 2,[1,2,3]], 1])給出[5,4,3,2,1,2,3,1]
我對這個問題的嘗試:
def flatten_list(x):
list1=[]
for i in x:
if type(i)==list:
for j in i:
list1.append(j)
else:
list1.append(i)
return list1
flatten_list([5, [4, 3, 2,[1,2,3]], 1])
但這給出了一個輸出:
[5, 4, 3, 2, [1, 2, 3], 1]
我對編碼很陌生,即使答案很長,也希望得到一個簡單的答案!我看過與此類似的其他 stackoverflow 問題,但是它們使用復雜的命令,例如 isinstance() 或 flatten() 并且它們并沒有完全回答我的特定問題,例如 使用遞回迭代串列遞回 遍歷串列(python)
uj5u.com熱心網友回復:
您的代碼僅適用于串列中的串列。
更好的方法是使用遞回i,
像這樣的東西,
def flatten_list(x):
list1=[]
for i in x:
if type(i)==list:
for j in flatten_list(i):
list1.append(j)
else:
list1.append(i)
return list1
uj5u.com熱心網友回復:
這可以在不引入flattenor 的情況下使用遞回來完成isinstance:
def flatten_list(x):
output = []
for e in x:
if type(e) == list:
output.extend(flatten_list(e))
else:
output.append(e)
return output
====================================
print(flatten_list([5, [4, 3, 2,[1,2,3]], 1]))
[5, 4, 3, 2, 1, 2, 3, 1]
uj5u.com熱心網友回復:
def flatten_list(x, result = None):
tmp_result = []
if result :
tmp_result = result
for elt in x:
if type(elt) ==list:
flatten_list(elt, tmp_result)
else:
tmp_result.append(elt)
return tmp_result
print(flatten_list([5, [4, 3, 2,[1,2,3]], 1])) # Output : [5, 4, 3, 2, 1, 2, 3, 1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383344.html
下一篇:如何從遞回函式回傳值?
