Python 串列是程式開發中不可或缺的資料結構,理解其進階操作能提升程式碼效率與簡潔性。本文除了基本操作外,更著重於函式如何處理串列,例如傳遞串列給函式並修改或傳回,以及如何生成特定規則的串列,例如前 n 個倍數或區間內的偶數。此外,文章也探討了迴文串列的判斷和重複元素的檢查,這些都是實際應用中常見的需求。透過程式碼範例和解析,讀者能更深入理解這些操作的原理和應用方式,進而提升 Python 程式設計能力。
Python 串列(List)進階操作與應使用案例項
在 Python 程式設計中,串列(List)是一種非常重要且常用的資料結構。本文將探討串列的進階操作,包括串列的分割、反轉、函式傳遞與傳回、以及一些實用的串列處理函式。
8.13 從函式傳回串列
當函式傳回一個串列時,實際上是傳回該串列的參考值。這意味著函式內部對串列的修改會直接影響到原始串列。
程式 8.8:傳遞串列給函式並反轉
def Reverse_List(Lst):
print('串列反轉前:', Lst)
Lst.reverse() # 使用 reverse() 方法反轉串列內容
return Lst # 傳回反轉後的串列
Lst = [10, 20, 30, 40, 3]
print('串列反轉後:', Reverse_List(Lst))
輸出結果:
串列反轉前: [10, 20, 30, 40, 3]
串列反轉後: [3, 40, 30, 20, 10]
程式碼解析:
Reverse_List函式接受一個串列Lst作為引數。- 在函式內部,使用
reverse()方法將串列內容反轉。 - 傳回反轉後的串列。
- 主程式中,定義一個串列
Lst並呼叫Reverse_List函式,最後印出結果。
建立特定規則的串列
我們可以編寫函式來生成符合特定規則的串列。
程式 8.9:生成前五個倍數的串列
def list_of_multiples(k):
my_list = []
for i in range(1, 6):
res = k * i
my_list.append(res)
return my_list
print(list_of_multiples(3))
輸出結果:
[3, 6, 9, 12, 15]
程式碼解析:
list_of_multiples函式接受一個正整數k。- 使用迴圈計算
k的前五個倍數,並將它們加入my_list。 - 傳回生成的串列。
更多串列相關程式
程式 8.10:生成兩個數字之間的所有偶數串列
def list_of_even_numbers(start, end):
output_list = []
for number in range(start, end):
if number % 2 == 0:
output_list.append(number)
return output_list
print(list_of_even_numbers(10, 20))
輸出結果:
[10, 12, 14, 16, 18]
程式碼解析:
list_of_even_numbers函式接受兩個引數:start和end。- 使用迴圈遍歷
start到end之間的數字,篩選出偶數並加入output_list。 - 傳回偶數串列。
檢查串列是否為迴文
迴文是指正向和反向讀取都相同的序列。
程式 8.11:檢查串列是否為迴文
def is_Lst_Palindrome(Lst):
r = Lst[::-1] # 取得串列的反向副本
for i in range(0, (len(Lst) + 1) // 2):
if r[i] != Lst[i]:
return False
return True
Lst = [1, 2, 3, 2, 1]
print(Lst, "是迴文:", is_Lst_Palindrome(Lst))
輸出結果:
[1, 2, 3, 2, 1] 是迴文: True
程式碼解析:
is_Lst_Palindrome函式檢查輸入串列是否為迴文。- 使用切片操作
[::-1]取得串列的反向副本。 - 對比原串列和其反向副本的前半部分元素,判斷是否相同。
其他實用功能實作
程式 8.12:檢查串列中是否有重複元素
def check_duplicate(Lst):
dup_Lst = []
for i in Lst:
if i not in dup_Lst:
dup_Lst.append(i)
else:
return True
return False
Lst = [4, 6, 2, 1, 6, 7, 4]
print(Lst)
print(check_duplicate(Lst))
輸出結果:
[4, 6, 2, 1, 6, 7, 4]
True
程式碼解析:
check_duplicate函式檢查輸入串列是否有重複元素。- 使用輔助串列
dup_Lst跟蹤已經遍歷過的元素。 - 若發現重複元素,立即傳回
True;遍歷完成後無重複則傳回False。
Python 列表操作與應用實務解析
Python 的列表(List)是一種強大且靈活的資料結構,廣泛應用於各種程式設計任務中。本文將探討列表的基本操作、進階應用以及相關的程式設計技巧。
列表基礎操作
列表是一種有序的集合,可以包含不同型別的元素。以下是一些基本的列表操作:
- 建立列表:可以使用方括號
[]或list()建構函式來建立列表。 - 索引與切片:使用索引運算元
[]可以存取列表中的元素。負索參照於從列表末尾開始計數。 - 新增元素:
append()、extend()和insert()方法用於在列表中新增元素。 - 刪除元素:
pop()和remove()方法用於從列表中刪除元素。
進階列表操作
- 列表解析: 是一種簡潔的語法,用於從現有的序列建立新的列表。
numbers = [1, 2, 3, 4, 5] squares = [x**2 for x in numbers] print(squares) # 輸出:[1, 4, 9, 16, 25]
2. **排序與反轉**:`sort()` 方法用於對列表進行排序,而 `reverse()` 方法用於反轉列表中的元素順序。
```python
numbers = [4, 2, 9, 6, 5]
numbers.sort()
print(numbers) # 輸出:[2, 4, 5, 6, 9]
numbers.reverse()
print(numbers) # 輸出:[9, 6, 5, 4, 2]
程式範例解析
程式 8.16:反轉列表元素
此程式展示瞭如何在不使用 reverse() 方法和切片的情況下反轉列表中的元素。
def print_reverse(Lst):
print('List Before Reversing')
print(Lst)
lst = []
count = 1
for i in range(0, len(Lst)):
lst.append(Lst[len(Lst) - count])
count += 1
return lst
Lst = [12, 23, 4, 5, 1, 9]
x = print_reverse(Lst)
print('List After Reversing')
print(x)
程式碼解密:
- 定義函式
print_reverse(Lst),接受一個列表Lst作為引數。 - 列印原始列表。
- 建立一個空列表
lst用於存放反轉後的結果。 - 使用迴圈遍歷原始列表,並將元素按逆序新增到
lst中。 - 傳回反轉後的列表
lst。
程式 8.17:找出指定範圍內的奇數
此程式展示瞭如何找出兩個正整數之間的奇數,並以降序排列。
def list_of_odd_numbers(start, end):
output_list = []
for number in range(start, end + 1):
if number % 2 == 1:
output_list.append(number)
output_list.sort()
output_list.reverse()
return output_list
print(list_of_odd_numbers(10, 20))
程式碼解密:
- 定義函式
list_of_odd_numbers(start, end),接受起始和結束值作為引數。 - 建立一個空列表
output_list用於存放奇數。 - 使用迴圈檢查指定範圍內的每個數字是否為奇數,如果是,則新增到
output_list中。 - 對
output_list進行排序,然後反轉,以獲得降序排列的奇數列表。 - 傳回結果列表。
常見問題與解答
如何檢查一個列表是否包含重複元素?
- 可以使用集合(set)來檢查重複元素,將列表轉換為集合,如果原始列表的長度與集合的大小不同,則表示存在重複元素。
如何在不使用內建排序函式的情況下對列表進行排序?
- 可以使用氣泡排序、選擇排序或插入排序等演算法來實作。
列表(List)相關問題與解答
列表比較
List1 = [‘A’, ‘B’, ‘C’] 和 List2 = [‘B’, ‘A’, ‘C’] 是否相等?
- 答案:b. No
- 原因:List1 和 List2 的元素順序不同,因此它們不相等。
真假題
The list() is used to create an empty list.:True
- 可以使用
list()建立一個空列表。
- 可以使用
The range() is used for creating a list with elements from 0 to 5.:True
range()可以用來生成一個序列,從 0 到 5(不包含 5),可以轉換成列表。
A list can be created without using a constructor.:True
- 可以直接使用
[]建立一個列表,無需使用list()建構函式。
- 可以直接使用
The elements of a list are not identified by their positions.:False
- 列表中的元素是透過其位置(索引)來識別的。
The negative index accesses elements from the start of a list.:False
- 負索引是從列表的末尾開始存取元素。
List1[-1] accesses the first element of a list.:False
List1[-1]存取的是列表的最後一個元素。
L1[2:5] returns all the elements stored between the index 2 and the one less than the end index, i.e. 5-1 = 4.:True
L1[2:5]傳回索引 2 到 4 的元素。
It is possible to access the elements of a list only in sequence.:False
- 可以透過索引隨機存取列表中的元素,而不僅僅是按順序。
The len() returns a number of elements in a list.:True
len()傳回列表中的元素個數。
The sum() returns the sum of all the elements in a list.:True
sum()傳回列表中所有元素的總和。
It is impossible to shuffle elements randomly in a list.:False
- 可以使用
random.shuffle()隨機打亂列表中的元素。
- 可以使用
The concatenation operator ‘+’ is used to join two lists.:True
+用於連線兩個列表。
The multiplication operator * is used to replicate the elements in a list.:True
*用於重複列表中的元素。
The del operator is used to remove a specific element from a list.:True
del可以用來刪除列表中的特定元素。
Odd elements of a list can be displayed using list comprehension.:True
- 可以使用列表推導式來顯示列表中的奇數元素。
One can insert an element at a given index.:True
- 可以使用
insert()方法在指定索引處插入元素。
- 可以使用
The pop(1) removes an element from a list which is at index 1.:True
pop(1)刪除索引 1 處的元素。
The pop() removes the last element from a list.:True
pop()如果不指定索引,則刪除最後一個元素。
A string is a sequence of characters.:True
- 字串是字元的序列。
A programmer can pass a list to a function and perform various operations.:True
- 可以將列表傳遞給函式並執行各種操作。
練習題與解答
如何建立一個列表?
- 使用
[]或list()可以建立一個列表。
列出並闡述支援列表的運算子。
- 連線運算子
+、重複運算子*等。
‘is’ 運算子在 Python 中的用途是什麼?
is用於檢查兩個物件是否是同一個物件。
哪個運算子用於刪除列表中的元素?
del運算子。
如何計算列表中相似元素的數量?
- 可以使用
count()方法。
如何反轉列表中的元素?
- 使用
reverse()方法或切片[::-1]。
程式設計練習
將列表傳遞給函式並傳回其反序。
def reverse_list(lst):
return lst[::-1]
lst = [1, 2, 3, 4]
print(reverse_list(lst)) # [4, 3, 2, 1]
複製列表中的元素 n 次。
def replicate_n_times(lst, n):
return [item for item in lst for _ in range(n)]
lst = [1, 2, 3]
print(replicate_n_times(lst, 2)) # [1, 1, 2, 2, 3, 3]
從列表中刪除負數元素。
def remove_negative(lst):
return [x for x in lst if x >= 0]
lst = [-1, 0, 2, -4, 12]
print(remove_negative(lst)) # [0, 2, 12]
資料檢索與排序簡介
簡介
許多應用程式需要對物件或專案進行搜尋和排序。電腦可以輕鬆管理這項任務,從小型個人資料集到更詳細的資料函式庫,都可以高效地檢索資訊。
搜尋技術
線性搜尋和二分搜尋是兩種基本的搜尋技術。二分搜尋要求資料已經排序。
常見排序技術
包括氣泡排序、選擇排序、快速排序、插入排序和合併排序等。這些技術在不同的場景下有不同的效率和適用性。