在 Python 中將列表拆分成塊

Azaz Farooq 2023年1月30日 2021年2月28日
  1. 使用列表推導式方法將 Python 中的列表拆分為塊
  2. 在 Python 中使用 itertools 方法將列表拆分為塊狀
  3. 在 Python 中使用 lambda 函式將 Python 中的列表拆分為塊
  4. 在 Python 中使用 lambdaislice 方法將列表拆分為塊
  5. 在 Python 中使用 NumPy 方法將列表拆分為塊
  6. 在 Python 中使用使用者定義的函式將列表拆分成塊
在 Python 中將列表拆分成塊

Python 資料結構中的一種可以在其中包含混合值或元素的結構叫做列表。本文將介紹將一個列表分割成塊的各種方法。你可以使用任何符合你規範的程式碼示例。

使用列表推導式方法將 Python 中的列表拆分為塊

我們可以使用列表推導式將一個 Python 列表分割成塊。這是一種封裝操作的有效方法,使程式碼更容易理解。

完整的示例程式碼如下。

test_list = ['1','2','3','4','5','6','7','8','9','10']

n=3

output=[test_list[i:i + n] for i in range(0, len(test_list), n)]
print(output)

輸出:

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

range(0, len(test_list), n) 返回一個從 0 開始到 len(test_list) 結束的數字範圍,步長為 n。例如,range(0, 10, 3) 將返回 (0, 3, 6, 9)

test_list[i:i + n] 得到從索引 i 開始,到 i + n 結束的列表塊。拆分列表的最後一塊是 test_list[9],但計算出的指數 test_list[9:12] 不會出錯,而是等於 test_list[9]

在 Python 中使用 itertools 方法將列表拆分為塊狀

該方法提供了一個必須使用 for 迴圈進行迭代的生成器。生成器是描述迭代器的一種有效方式。

from itertools import zip_longest
test_list = ['1','2','3','4','5','6','7','8','9','10']


def group_elements(n, iterable, padvalue='x'):
    return zip_longest(*[iter(iterable)]*n, fillvalue=padvalue)

for output in group_elements(3,test_list):
    print(output)

輸出:

('1', '2', '3')
('4', '5', '6')
('7', '8', '9')
('10', 'x', 'x')

[iter(iterable)]*n 生成一個迭代器,並在列表中迭代 n 次。然後通過 izip-longest 有效地對每一個迭代器進行輪迴,由於這是一個類似的迭代器,所以每一次這樣的呼叫都是高階的,結果每一次這樣的 zip 輪迴都會產生一個 n 個物件的元組。

在 Python 中使用 lambda 函式將 Python 中的列表拆分為塊

可以使用一個基本的 lambda 函式將列表分成一定大小或更小的塊。這個函式工作在原始列表和 N 個大小的變數上,遍歷所有的列表項,並將其分成 N 個大小的小塊。

完整的示例程式碼如下:

test_list = ['1','2','3','4','5','6','7','8','9','10']

x = 3

final_list= lambda test_list, x: [test_list[i:i+x] for i in range(0, len(test_list), x)]

output=final_list(test_list, x)

print('The Final List is:', output)

輸出:

The Final List is: [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['10']]

在 Python 中使用 lambdaislice 方法將列表拆分為塊

lambda 函式可以與 islice 函式一起使用,產生一個在列表上迭代的生成器。islice 函式建立一個迭代器,從可迭代元素中提取選定的專案。如果起始值是非零,那麼在到達起始值之前將跳過可迭代的元素。然後,元素將被連續返回,除非一個步長設定的高於一個步長,導致元素被跳過。

完整的示例程式碼如下:

from itertools import islice

test_list = ['1','2','3','4','5','6','7','8','9','10']

def group_elements(lst, chunk_size):
    lst = iter(lst)
    return iter(lambda: tuple(islice(lst, chunk_size)), ())

for new_list in group_elements(test_list , 3):
    print(new_list)

輸出:

('1', '2', '3')
('4', '5', '6')
('7', '8', '9')
('10',)

在 Python 中使用 NumPy 方法將列表拆分為塊

NumPy 庫也可以用來將列表分成 N 個大小的塊。array_split() 函式將陣列劃分為特定大小 n 的子陣列。

完整的示例程式碼如下:

import numpy

n = numpy.arange(11)

final_list = numpy.array_split(n,4);
print("The Final List is:", final_list)

arange 函式根據給定的引數對數值進行排序,array_split() 函式根據給定的引數生成列表/陣列。

輸出:

The Final List is: [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10])]

在 Python 中使用使用者定義的函式將列表拆分成塊

此方法將遍歷列表併產生連續的 n 大小的塊,其中 n 指的是需要執行拆分的數量。在這個函式中使用了一個關鍵字 yield,它允許一個函式在暫停執行時,隨著值的轉動而停止和恢復。這是與普通函式的重要區別。普通函式不能返回到它離開的地方。當我們在函式中使用 yield 語句時,這個函式被稱為生成器。生成器產生或返回值,不能命名為一個簡單的函式,而是命名為一個可迭代的函式,即使用迴圈。

完整的示例程式碼如下。

test_list = ['1','2','3','4','5','6','7','8','9','10'] 

def split_list(lst, n):  
    for i in range(0, len(lst), n): 
        yield lst[i:i + n] 

n = 3

output = list(split_list(test_list, n)) 
print(output)

輸出:

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

相關文章 - Python List