vocus logo

方格子 vocus

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
小松鼠的演算法樂園
99會員
428內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
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
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
賽勒布倫尼科夫以流亡處境回望蘇聯電影導演帕拉贊諾夫的舞台作品,以十段寓言式殘篇,重新拼貼記憶、暴力與美學,並將審查、政治犯、戰爭陰影與「形式即政治」的劇場傳統推到台前。本文聚焦於《傳奇:帕拉贊諾夫的十段殘篇》的舞台美術、音樂與多重扮演策略,嘗試解析極權底下不可言說之事,將如何成為可被觀看的公共發聲。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
柏林劇團在 2026 北藝嚴選,再次帶來由布萊希特改編的經典劇目《三便士歌劇》(The Threepenny Opera),導演巴里・柯斯基以舞台結構與舞台調度,重新向「疏離」進行提問。本文將從觀眾慾望作為戲劇內核,藉由沉浸與疏離的辯證,解析此作如何再次照見觀眾自身的位置。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
本文深入解析臺灣劇團「晃晃跨幅町」對易卜生經典劇作《海妲.蓋柏樂》的詮釋,從劇本歷史、聲響與舞臺設計,到演員的主體創作方法,探討此版本如何讓經典劇作在當代劇場語境下煥發新生,滿足現代觀眾的觀看慾望。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
Thumbnail
《轉轉生》為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,融合舞蹈、音樂、時尚和視覺藝術,透過身體、服裝與群舞結構,回應殖民歷史、城市經驗與祖靈記憶的交錯。本文將從服裝設計、身體語彙與「輪迴」的「誕生—死亡—重生」結構出發,分析《轉轉生》如何以當代目光,形塑去殖民視角的奈及利亞歷史。
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