Python - 用序號替換列表元素。
在本文中,我們將學習如何用其序號替換任何給定的列表元素。我們將看到完成此工作的各種方法。在此之前,讓我們瞭解一下序數。
序數 - 在數學中,我們將序數稱為表示序列中列表項的位置或原始順序的數字。
舉一個列表的例子:[ 6, 8, 5, 3 ],這些數字的序數值將是 -
第一個元素 (6) 的序數值為 1。
第二個元素 (8) 的序數值為 2。
第三個元素 (5) 的序數值為 3。
第四個元素 (3) 的序數值為 4。
讓我們看看用序數替換列表項的各種方法。
方法 1. 使用巢狀列表推導式結合 enumerate。
示例
List_items = [[6, 8, 5, 3], [22, 52, 13], [11], [35], [61, 15]] replaced_ordinal_list = [[idx] * len(sublist) for idx, sublist in enumerate(List_items)] print(replaced_ordinal_list)
輸出
[[0, 0, 0, 0], [1, 1, 1], [2], [3], [4, 4]]
解釋
在上面的程式中,我們使用了巢狀列表推導式。外部推導式迭代 List_items 中的每個子列表,內部推導式透過遍歷每個內部子列表來生成列表。
方法 2. 使用巢狀迴圈。
示例
List_items = [[6, 8, 12, 15], [2, 5, 13], [1], [5, 5], [6, 15]] replaced_ordinal_list = [] for idx, sublist in enumerate(List_items): ordinal_list = [idx] * len(sublist) replaced_ordinal_list.append(ordinal_list) print(replaced_ordinal_list)
輸出
[[0, 0, 0, 0], [1, 1, 1], [2], [3, 3], [4, 4]]
解釋
在上面的程式中,我們使用巢狀 for 迴圈遍歷每個子列表
在 List_items 中。在外部迴圈中遍歷時,我們建立了序數列表,並將其索引乘以每個子列表的長度。
方法 3. 使用列表推導式結合 while 迴圈。
示例
List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]] replaced_ordinal_list= [] idx = 0 while idx < len(List_items): ordinal_list = [idx] * len(List_items[idx]) replaced_ordinal_list.append(ordinal_list) idx += 1 print(replaced_ordinal_list)
輸出
[[0, 0, 0, 0], [1, 1, 1], [2], [3, 3, 3], [4, 4]]
解釋
在上面的程式中,我們使用 while 迴圈遍歷 List_items 中的每個子列表。在外部迴圈中遍歷時,我們建立了一個序數列表
方法 4. 使用字典和 enumerate。
示例
import numpy as np
List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]]
replaced_ordinal_list= [{idx: sublist} for idx, sublist in enumerate(List_items)]
print(replaced_ordinal_list)
輸出
[{0: [6, 8, 12, 15]}, {1: [2, 5, 13]}, {2: [1]}, {3: [5, 2, 6]}, {4: [6, 15]}]
解釋
在上面的程式中,我們為 List_items 中的每個子列表建立字典。這裡索引 (idx) 充當鍵,子列表充當值。我們將結果字典儲存在 replaced_ordinal_list 中。
方法 5. 使用列表推導式結合索引。
在這種方法中,我們將檢視當我們希望將一個子列表表示為索引 0,並將下一個子列表表示為前一個子列表的索引增量時,如何有效地做到這一點。
示例
import numpy as np List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]] replaced_ordinal_list = [[idx] for idx, sublist in enumerate(List_items) for _ in sublist] print(replaced_ordinal_list)
輸出
[[0], [0], [0], [0], [1], [1], [1], [2], [3], [3], [3], [4], [4]]
解釋
在上面的程式中,我們使用帶有巢狀迴圈的列表推導式。外部迴圈迭代 List_items 中的每個子列表,內部迴圈重複子列表中每個元素的索引。
方法 6:使用遞迴
示例
def replace_ordinal_fun(List_items, ind=0):
if not List_items:
return []
return [ind] * len(List_items[0]) + replace_ordinal_fun(List_items[1:], ind+1)
List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]]
replaced_ordinal_list = replace_ordinal_fun(List_items)
print(replaced_ordinal_list)
輸出
[0, 0, 0, 0, 1, 1, 1, 2, 3, 3, 3, 4, 4]
解釋
在上面的程式中,我們使用了遞迴函式 replace_ordinal_fun 來用其序號替換列表元素。這裡遞迴函式將輸入引數作為專案列表和從 0 開始的索引。在每次遞迴中,它獲取子列表併為該列表構建序數,然後在下一次遞迴呼叫中,它獲取另一個子列表並再次為該列表構建序數。當輸入列表為空時,它將返回,這作為遞迴函式的基本情況。
方法 7:使用生成器表示式。
示例
import numpy as np List_items= [[6, 8, 12, 15], [2, 5, 13,], [1], [5, 2, 6], [6, 15]] replaced_ordinal_list = list([idx] * len(sublist) for idx, sublist in enumerate(List_items)) print(replaced_ordinal_list)
輸出
[[0, 0, 0, 0], [1, 1, 1], [2], [3, 3, 3], [4, 4]]
解釋
在上面的程式中,我們在列表構造器內部使用了生成器表示式,用於透過將索引乘以每個子列表的長度來生成列表。生成表示式後,我們將結果生成器表示式轉換為名為 replaced_ordinal_list 的列表。
因此,我們瞭解了多種方法,可以使用這些方法用其序號替換列表元素。每種方法都有其自己的方法來查詢序數。您可以選擇適合您需求的方法,但瞭解各種方法對於學習來說是件好事。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP