Python巢狀列表的合併


Python中的巢狀列表是指多個列表相互巢狀,這在執行資料操作任務時非常有用;但是,有時我們可能希望更改或展平這種巢狀結構,用Python術語來說,就是將多個層次結構更改為單個(非巢狀)結構,其中所有元素都屬於相同的範圍,沒有層次結構或層次結構。在本文中,我們將說明如何使用不同的方法在Python中合併巢狀列表。

使用遞迴方法在Python中合併巢狀列表

程式碼解釋和設計步驟:

  • 步驟1匯入所需的模組:我們從‘collections.abc’模組匯入‘Iterable’類——iterable是Python的內建介面之一,它表示能夠一次返回其成員的物件。

  • 步驟2定義一個展平列表的函式:flatten函式接受一個引數lst,其中包含要展平的列表;此函式將隨後被重複呼叫到任何深度的集合上。

  • 步驟3迭代列表中的每個專案:‘for’迴圈迭代輸入列表中的每個元素,其中item用作索引變數來表示當前哪個元素占主導地位。

  • 步驟4 − 判斷一個專案是可迭代的,但不是字串或位元組。

  • 步驟5 − 定義一個巢狀列表:這將是要展平的列表。

  • 步驟6 − 呼叫Flatten函式並列印輸出。

注意 − 此條件是關鍵,因為字串和位元組也可以被認為是可迭代的;但是,我們不希望那樣對待它們,因為這會導致將字串字元分解成單個字母。當專案滿足此條件但不屬於字串或位元組形式時,我們遞迴呼叫flatten以使用yield from語句在flatten函式對該專案呼叫的呼叫之間產生此呼叫的每個元素。

它可能會產生每個後續呼叫週期yield from語句的每個元素,yield from語句將返回這些遞迴呼叫的每個元素,yield from語句將產生此回撥週期的每個元素,yield from語句在呼叫之間,這些呼叫的元素最終將遞迴地產生flatten函式對其自身物件呼叫的每個元素。如果可迭代項、字串或位元組與可迭代項不匹配,則產生它:在這種情況下,我們使用else子句並簡單地按原樣返回它包含的內容。

示例1

程式碼執行和實現:

from collections.abc import Iterable
# Importing the Iterable class from the collections.abc module.

def flatten(lst):
   # Defining a function named 'flatten' that takes a list as input.
    
   for item in lst:

      if isinstance(item, Iterable) and not isinstance(item, (str, bytes)):
         
         yield from flatten(item)
      else:
         yield item
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# A nested list to be flattened.
print(list(flatten(nested_list)))

輸出

[1, 2, 3, 4, 5, 6, 7, 8, 9]

使用列表推導方法在Python中合併巢狀列表

程式碼解釋和設計步驟:

  • 步驟1 − 在Anaconda提示符中開啟Jupyter Notebook,並開始在其單元格中編寫程式碼。

  • 步驟2 − 建立一個名為flatten()的函式,該函式包含一個名為nested_list的引數。

  • 步驟3 − 利用列表推導式建立一個列表

  • 步驟4 − 需要先定義一個巢狀列表,然後根據您的個人需求和願望進行更改。

  • 步驟5 − 我們對原始巢狀列表執行‘flatten()’函式並列印其結果,一個由從原始列表中提取的元素按其出現順序組成的有序列表應該在用“print語句:來自原始巢狀列表的所有元素……”列印時出現,因為它們的順序最初是被定義的。

示例2

程式碼執行和實現:

def flatten(nested_list):
   return [item for sublist in nested_list for item in sublist]
nested_list = [[1,2,3], [4,5,6], [7,8,9]]
print(flatten(nested_list))

輸出

[1, 2, 3, 4, 5, 6, 7, 8, 9]

注意 − 此方法僅適用於只有一層巢狀的列表。如果其他列表包含進一步的巢狀,則此方法將無法完全展平它們——在這種情況下,像上面顯示的遞迴解決方案可能更合適。

結論

在本文中,我們使用兩種不同的方法(例如遞迴和列表推導方法)在Python中合併巢狀列表。這兩種方法都可以在展平巢狀列表時應用;最合適的選擇將取決於您的特定用例的巢狀級別。在Python中展平巢狀列表是指將子列表陣列轉換為無序的一維列表而不包含子列表的過程——這在涉及操作複雜或不必要的列表層次結構的資料操作任務中是一項寶貴的技能。它在簡化操作方面特別有效,否則這些操作將涉及像這些巢狀子列表這樣的廣泛列表。

更新於:2023年10月18日

660 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.