使用Python將列表展平為單個元素


列表是Python中一種強大的資料結構,可以容納多種型別的多個值。我們可能會遇到巢狀列表,其中專案本身就是列表。在這種情況下,展平列表並從分層結構中檢索單個元素可能至關重要。在Python中,我們有一些內建函式——chain()、extend()和append()——可以用來解決將列表展平為單個元素的問題。

讓我們來看一個例子

輸入

# Flatten List
my_list = [[11, 21, 31], [20, 30, 40], [4, 5, 6], [1, 2, 3]]

輸出

# individual element in the list
[11, 21, 31, 20, 30, 40, 4, 5, 6, 1, 2, 3]

語法

以下語法在所有示例中都使用:

itertools.chain()

itertools是提供chain()內建函式的模組名稱。此函式將多個迭代器作為引數來返回單個迭代器。

extend()

extend()是Python中的內建方法,它在當前列表的末尾新增特定的列表元素。

append()

append()是Python中的內建方法,它可以在列表的末尾新增元素。

[[],[],[]]

以上表示巢狀列表結構。

使用巢狀迴圈

程式使用巢狀for迴圈迭代子列表,並使用append()方法將其轉換為單個元素。

示例

在下面的示例中,程式首先定義名為flatten_list的函式,該函式接受名為lst的引數(接收輸入列表的值)。然後在變數flattened中建立一個空列表,該列表將儲存包含單個元素的列表。接下來,使用巢狀for迴圈迭代列表中的每個子列表,並使用append()將其轉換為單個元素。然後使用函式返回獲取新列表。現在在變數nested_list中建立展平列表,並將相同的變數作為引數用於呼叫函式以將其儲存在變數f_list中。最後,我們藉助變數f_list列印結果。

def flatten_list(lst):
    flattened = []
    for sublist in lst:
        for item in sublist:
            flattened.append(item)
    return flattened

# Create the flattened list
nested_list = [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
# Calling function used in the variable
f_list = flatten_list(nested_list)
print("The individual element in the list:\n", f_list)

輸出

 The individual element in the list:
 [10, 20, 30, 40, 50, 60, 70, 80, 90]

使用列表推導式

程式使用列表推導式,其中實現了巢狀for迴圈以將展平列表轉換為單個元素。

示例

在下面的示例中,程式首先定義名為flatten_list的函式,該函式接受名為lst的引數,用於儲存輸入列表的值。然後使用列表推導式返回函式,其中巢狀for迴圈迭代子列表。接下來,建立展平列表並將其儲存在變數n_list中。然後在變數f_list中使用呼叫函式,並在print函式中使用相同的變數以獲取結果。

def flatten_list(lst):
    return [item for sublist in lst for item in sublist]

# Create the flatten list
n_list = [[11, 21, 31], [41, 51, 61], [71, 81, 91]]
# calling function used in the variable
f_list = flatten_list(n_list)
print("The individual element in the list:\n", f_list)

輸出

 The individual element in the list:
 [11, 21, 31, 41, 51, 61, 71, 81, 91]

使用itertools.chain()函式

這是一個使用itertools模組展平巢狀列表的Python程式。flatten_list函式將巢狀列表作為引數,並返回一個包含子列表中所有元素的新列表。itertools.chain函式將所有子列表組合成一個可迭代物件,然後使用list函式將其轉換為列表。程式然後建立一個名為nested_list的巢狀列表,使用此列表作為引數呼叫flatten_list函式,並將結果賦值給變數flattened_list。

示例

在下面的示例中,程式首先匯入名為itertools的模組,這將有助於將展平列表轉換為單個元素。然後開始建立接受引數lst的flatten_list函式

import itertools
def flatten_list(lst):
    return list(itertools.chain(*lst))
# Create the flatten list
nested_list = [[12, 22, 32], [42, 52, 62], [72, 82, 92]]
# Calling function used in the variable
flattened_list = flatten_list(nested_list)
print("The individual element in the list:\n", flattened_list)

輸出

 The individual element in the list:
 [12, 22, 32, 42, 52, 62, 72, 82, 92]

使用遞迴

程式使用遞迴函式來處理展平列表,並使用內建函式isinstance()檢查物件的型別,從而幫助將展平列表生成單個元素。

示例

在下面的示例中,程式透過提取每個元素來迭代地展平構造的列表。然後,它列印包含巢狀列表中所有單個元素的展平列表。

def flatten_list(lst):
    emp_list = []
    for item in lst:
        if isinstance(item, list):
            emp_list.extend(flatten_list(item))
        else:
            emp_list.append(item)
    return emp_list


# Create the flatten list
nested_list = [[81, 82, 83], [84, 85, 86], [87, 88, 89, 99, 100]]
f_list = flatten_list(nested_list)
print("The individual element in the list:\n", f_list)

輸出

 The individual element in the list:
 [81, 82, 83, 84, 85, 86, 87, 88, 89, 99, 100]

結論

我們討論瞭解決問題陳述的各種方法。我們瞭解了列表展平如何為我們提供一項基本技能,使我們能夠更有效地處理複雜的資料結構並訪問單個元素。此外,無論我們是在進行資料處理、演算法問題解決還是任何其他Python程式設計作業或任務,瞭解如何展平列表都將非常有用。

更新於:2023年8月16日

瀏覽量:165

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.