[英]reversing a nested list in python
您好我正在嘗試以相反的順序轉換嵌套列表。
這是我的代碼:
def reverse_(items):
items = items[::-1]
new_l = []
for item in items:
if type(item) == list:
item.reverse()
new_l.append(item)
else:
new_l.append(item)
return new_l
print(reverse_reversed([1, [2, 3, 4, 'yeah'], 5] ))
返回: [5, ['yeah', 4, 3, 2], 1]
這是正確的
但是print(reverse_reversed([42, [99, [17, [33, ['boo!']]]]])
返回: [[[17, [33, ['boo,']]], 99], 42]
應該是這樣的: [[[[['boo,'], 33], 17], 99], 42]
看起來您想要遞歸地反轉列表,而不僅僅是一次嵌套。 這意味着您需要進行遞歸 function 調用,即它需要調用自身。
def recursive_reversed(items):
if isinstance(items, list):
return [recursive_reversed(item) for item in reversed(items)]
return items
筆記:
isinstance
檢查而不是type(item) ==
。 這通常是您想要的,這意味着list
的子類也將被反轉(盡管它們將是常規列表)。reversed
以相反的順序迭代原始列表。這是因為你做了items[::-1]
,這使得列表最終像這樣[[99, [17, [33, ['boo,']]]], 42]
正如你在你的列表只有兩個項目[99, [17, [33, ['boo!']]]]
和42
。 所以你新的如果列表中有更多列表,你將不得不檢查你是否正在迭代你的列表中沒有未反轉的列表。 但是你不能用一個簡單的 for 循環來做到這一點。
如果您實際上不需要反轉副本,而只想反轉結構本身:
def reverse(items):
if isinstance(items, list):
items.reverse()
for item in items:
reverse(item)
演示:
>>> a = [42, [99, [17, [33, ['boo!']]]]]
>>> reverse(a)
>>> a
[[[[['boo!'], 33], 17], 99], 42]
您也可以使用return items
結束它以獲得返回的結果:
>>> reverse([42, [99, [17, [33, ['boo!']]]]])
[[[[['boo!'], 33], 17], 99], 42]
雖然修改和返回都有些不尋常,但有些人不會喜歡它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.