Python 陣列 與 List comprehension 列表推導式

更新於 發佈於 閱讀時間約 6 分鐘

Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。

Array 這種連續格子狀的資料結構,在Python要怎麼表達呢?


建立一個空的陣列

最簡單也最直接的寫法就是

array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結構

或者

array = list() # 相當於呼叫list()的建構子

這兩個語法都相當於建立一個空的陣列。

印出來,可以很清楚看到結果,就是一個[],裡面什麼東西都沒有。

raw-image

增加元素

在尾巴加入新元素

array.append( x ) # 在尾巴插入一個新的元素。

用起來就好像C++ vector 的 push_back(x) ,會在尾端新增一筆資料,內容為x

raw-image


在指定位置插入新元素

# 在pos位置,插入element
# pos 從0開始起算,0是最前面的位置
array.insert(pos, element)

觀念上有點像C++ vector的insert,差別在於C++接收的參數是iterator

除非有特殊需求,一般日常應用不建議這麼用,因為複雜度是O(n)線性等級的。

run-time的時間成本很高。

raw-image

讀取指定陣列位址的元素

和其他主流高階語言相同,都支援array[index]的陣列元素存取語法。

index 同樣是從0開始起算,0是開頭的索引編號

# 印出array[0]
print( array[0])

index = 1
# 印出array[index]​
print( array[index])
raw-image

刪除元素

刪除並且回傳尾巴最後一個元素

array.pop()

如果把array 當成stack來用,

那麼array.append(x) 就對應到 stack 的 push(x) 操作

array.pop() 就對應到 stack 的 pop()操作

raw-image


刪除並且回傳指定位置的陣列元素

# 刪除並且回傳array[pos]
# pos 從0開始起算,0是最前面的位置
array.pop( pos )

觀念上有點像C++ vector的erase,差別在於C++接收的參數是iterator

除非有特殊需求,一般日常應用不建議這麼用,因為複雜度是O(n)線性等級的。

run-time的時間成本很高。

raw-image

建立帶有初始值的陣列

如何有規律的生成元素,或者生成一整塊帶有初始值的陣列?

傳統高階語言寫法: 使用迴圈

如果我們要建立一個長度為10的陣列,裡面初始值都是0。

可以這樣寫

array = []

for i in range(10):
array.append(0)

print(array)

得到的輸出就是

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


另一個例子是,如果建立一個長度為10的陣列,裡面初始值就是流水號0~9。

可以這樣寫

array = []

for i in range(10):
array.append(i)

print(array)

得到的輸出就是

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

List comprehension 列表推導式

Python提供一個更簡潔也更彈性的語法List comprehension,
中文稱之為列表推導式(或 列表生程式),
可以在把初始化的常數、運算式或函式直接放在[]裡面。

語法可以這樣表達

[ 初始值 for 索引變數 in range( ... ) ]

或者

[ 函式計算的結果 for 索引變數 in range( ... ) ]


如果我們要建立一個長度為10的陣列,裡面初始值都是0。

用List comprehension來寫,就變成這樣

array =[ 0 for i in range(10)]
print(array)

得到的輸出同樣是

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


如果我們要建立一個長度為10的陣列,裡面初始值是流水號0~9。

用List comprehension來寫,就變成這樣

array =[ i for i in range(10)]
print(array)

得到的輸出就是

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


如同剛剛語法的介紹,給予函數計算結果或者等價的lambda expression 也是可以的。

例如,想要根據奇數、偶數輸出提示字串,可以這樣寫

def judge(x):
if x % 2 == 0:
return f"{x} is Even"
else:
return f"{x} is Odd"

array =[ judge(i) for i in range(6) ]
print(array)

得到的輸出就是

['0 is Even', '1 is Odd', '2 is Even', '3 is Odd', '4 is Even', '5 is Odd']


例如,想要得到前10個完全平方數,可以這樣寫

array =[ i**2 for i in range(1, 11, 1) ]
print(array)

得到的輸出就是

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


例如,想要判斷流水號i 是不是3的倍數,可以這樣寫

array =[ (i % 3 ==0) for i in range(6) ]
print(array)

得到的輸出就是

[True, False, False, True, False, False]


另外,由於支援range迭代器(起點, 終點, 步伐)的語法,

所以控制起點、終點迭代區間也是可行的。


註: Python range的區間是包含起點,不包含終點,請特別留意


例如,想要輸出100到120之間的偶數陣列,可以這樣寫

array =[ i for i in range(100, 122, 2) ]
print(array)

得到的輸出就是

[100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120]

Reference:

[1] 5. Data Structures — Python 3.12.4 documentation

留言
avatar-img
留言分享你的想法!
小松鼠-avatar-img
發文者
2024/08/13
動手學python 的引言與目錄提及了這篇文章,趕快過去看看吧!
avatar-img
小松鼠的演算法樂園
95會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/10/10
從Python 內建deque資料結構的角度切入, 同時了解deque 與 FIFO Queue相關的function用法。 collections.deque是一種兩端點皆可進出的雙端佇列 在兩端點高效地在O(1)常數時間內添加和刪除元素。 這使得deque非常適合實現FIFO Queue
Thumbnail
2024/10/10
從Python 內建deque資料結構的角度切入, 同時了解deque 與 FIFO Queue相關的function用法。 collections.deque是一種兩端點皆可進出的雙端佇列 在兩端點高效地在O(1)常數時間內添加和刪除元素。 這使得deque非常適合實現FIFO Queue
Thumbnail
2024/09/27
井字遊戲(OOXX)的遊戲描述 Tic Tac Toe(井字遊戲)是經典的雙人棋盤遊戲,在一個3x3的方格中進行。 每回合兩個玩家輪流選一個位置,先讓自己的符號(是 X 或 O)在 水平線、垂直線或對角線上連成一線的玩家宣告獲勝。
Thumbnail
2024/09/27
井字遊戲(OOXX)的遊戲描述 Tic Tac Toe(井字遊戲)是經典的雙人棋盤遊戲,在一個3x3的方格中進行。 每回合兩個玩家輪流選一個位置,先讓自己的符號(是 X 或 O)在 水平線、垂直線或對角線上連成一線的玩家宣告獲勝。
Thumbnail
2024/09/23
深入探討圖(Graph)的基本概念 及 最短路徑Shortest Path的尋找。 我們專注於廣度優先搜尋(BFS)演算法,以等權圖的最短路徑為例, 詳細說明如何利用BFS從起點擴散到終點,並且提供詳細的程式碼範例。 透過實作,讀者能夠更清楚理解圖論及BFS的應用,並體會水波紋擴散模型的重要性。
Thumbnail
2024/09/23
深入探討圖(Graph)的基本概念 及 最短路徑Shortest Path的尋找。 我們專注於廣度優先搜尋(BFS)演算法,以等權圖的最短路徑為例, 詳細說明如何利用BFS從起點擴散到終點,並且提供詳細的程式碼範例。 透過實作,讀者能夠更清楚理解圖論及BFS的應用,並體會水波紋擴散模型的重要性。
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
Thumbnail
Basic python data structure
Thumbnail
Basic python data structure
Thumbnail
陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。
Thumbnail
陣列可以說是最常見的資料結構,LeetCode 裡的題目有過半都和 Array 有關,因此也通常是解題新手的第一站。在第一篇專文,我們就從它的操作方法講起。
Thumbnail
List 清單 和 Tuple元組 清單在Python裡面非常的常用,大家一定要熟練這些基礎的元素。 在Python中,列表(List)是一種常用的資料類型,用於儲存一組有序的元素。列表是可變的(Mutable),這意味著你可以在列表中新增、刪除和修改元素。列表使用方括號 []
Thumbnail
List 清單 和 Tuple元組 清單在Python裡面非常的常用,大家一定要熟練這些基礎的元素。 在Python中,列表(List)是一種常用的資料類型,用於儲存一組有序的元素。列表是可變的(Mutable),這意味著你可以在列表中新增、刪除和修改元素。列表使用方括號 []
Thumbnail
👨‍💻簡介 陣列就像是一個儲存相同類型資料的容器,你可以想像成裝滿了一樣東西的盒子,每個東西都叫做陣列元素。這種類型可以是基本的,像是整數或字串,也可以是你自己定義的型別。不過陣列有個限制,就是大小一旦確定就無法改變。在Go語言裡,陣列的長度也是型別的一部分。
Thumbnail
👨‍💻簡介 陣列就像是一個儲存相同類型資料的容器,你可以想像成裝滿了一樣東西的盒子,每個東西都叫做陣列元素。這種類型可以是基本的,像是整數或字串,也可以是你自己定義的型別。不過陣列有個限制,就是大小一旦確定就無法改變。在Go語言裡,陣列的長度也是型別的一部分。
Thumbnail
Hi,大家好。我是茶桁。 最近几节课,我们都是在详细讲解Python内的数据类型,上一节课我们详细了解了字符串,这节课,让我们来详解一下列表。 首先,我们先有一个大的概念,列表,其实就是一组有序的数据组合;另外,列表中的数据是可以被修改的。也就是说,列表是一个可变序列类型。 列表定义 如何在
Thumbnail
Hi,大家好。我是茶桁。 最近几节课,我们都是在详细讲解Python内的数据类型,上一节课我们详细了解了字符串,这节课,让我们来详解一下列表。 首先,我们先有一个大的概念,列表,其实就是一组有序的数据组合;另外,列表中的数据是可以被修改的。也就是说,列表是一个可变序列类型。 列表定义 如何在
Thumbnail
我們將會學習 Python 中的數據結構。 主要的數據結構包括列表 (List)、元組 (Tuple)、字典 (Dictionary) 以及集合 (Set)。
Thumbnail
我們將會學習 Python 中的數據結構。 主要的數據結構包括列表 (List)、元組 (Tuple)、字典 (Dictionary) 以及集合 (Set)。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News