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]

程式碼解析:

  1. Reverse_List 函式接受一個串列 Lst 作為引數。
  2. 在函式內部,使用 reverse() 方法將串列內容反轉。
  3. 傳回反轉後的串列。
  4. 主程式中,定義一個串列 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]

程式碼解析:

  1. list_of_multiples 函式接受一個正整數 k
  2. 使用迴圈計算 k 的前五個倍數,並將它們加入 my_list
  3. 傳回生成的串列。

更多串列相關程式

程式 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]

程式碼解析:

  1. list_of_even_numbers 函式接受兩個引數:startend
  2. 使用迴圈遍歷 startend 之間的數字,篩選出偶數並加入 output_list
  3. 傳回偶數串列。

檢查串列是否為迴文

迴文是指正向和反向讀取都相同的序列。

程式 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

程式碼解析:

  1. is_Lst_Palindrome 函式檢查輸入串列是否為迴文。
  2. 使用切片操作 [::-1] 取得串列的反向副本。
  3. 對比原串列和其反向副本的前半部分元素,判斷是否相同。

其他實用功能實作

程式 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

程式碼解析:

  1. check_duplicate 函式檢查輸入串列是否有重複元素。
  2. 使用輔助串列 dup_Lst 跟蹤已經遍歷過的元素。
  3. 若發現重複元素,立即傳回 True;遍歷完成後無重複則傳回 False

Python 列表操作與應用實務解析

Python 的列表(List)是一種強大且靈活的資料結構,廣泛應用於各種程式設計任務中。本文將探討列表的基本操作、進階應用以及相關的程式設計技巧。

列表基礎操作

列表是一種有序的集合,可以包含不同型別的元素。以下是一些基本的列表操作:

  1. 建立列表:可以使用方括號 []list() 建構函式來建立列表。
  2. 索引與切片:使用索引運算元 [] 可以存取列表中的元素。負索參照於從列表末尾開始計數。
  3. 新增元素append()extend()insert() 方法用於在列表中新增元素。
  4. 刪除元素pop()remove() 方法用於從列表中刪除元素。

進階列表操作

  1. 列表解析: 是一種簡潔的語法,用於從現有的序列建立新的列表。

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)

程式碼解密:

  1. 定義函式 print_reverse(Lst),接受一個列表 Lst 作為引數。
  2. 列印原始列表。
  3. 建立一個空列表 lst 用於存放反轉後的結果。
  4. 使用迴圈遍歷原始列表,並將元素按逆序新增到 lst 中。
  5. 傳回反轉後的列表 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))

程式碼解密:

  1. 定義函式 list_of_odd_numbers(start, end),接受起始和結束值作為引數。
  2. 建立一個空列表 output_list 用於存放奇數。
  3. 使用迴圈檢查指定範圍內的每個數字是否為奇數,如果是,則新增到 output_list 中。
  4. output_list 進行排序,然後反轉,以獲得降序排列的奇數列表。
  5. 傳回結果列表。

常見問題與解答

  1. 如何檢查一個列表是否包含重複元素?

    • 可以使用集合(set)來檢查重複元素,將列表轉換為集合,如果原始列表的長度與集合的大小不同,則表示存在重複元素。
  2. 如何在不使用內建排序函式的情況下對列表進行排序?

    • 可以使用氣泡排序、選擇排序或插入排序等演算法來實作。

列表(List)相關問題與解答

列表比較

List1 = [‘A’, ‘B’, ‘C’] 和 List2 = [‘B’, ‘A’, ‘C’] 是否相等?

  • 答案:b. No
  • 原因:List1 和 List2 的元素順序不同,因此它們不相等。

真假題

  1. The list() is used to create an empty list.:True

    • 可以使用 list() 建立一個空列表。
  2. The range() is used for creating a list with elements from 0 to 5.:True

    • range() 可以用來生成一個序列,從 0 到 5(不包含 5),可以轉換成列表。
  3. A list can be created without using a constructor.:True

    • 可以直接使用 [] 建立一個列表,無需使用 list() 建構函式。
  4. The elements of a list are not identified by their positions.:False

    • 列表中的元素是透過其位置(索引)來識別的。
  5. The negative index accesses elements from the start of a list.:False

    • 負索引是從列表的末尾開始存取元素。
  6. List1[-1] accesses the first element of a list.:False

    • List1[-1] 存取的是列表的最後一個元素。
  7. 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 的元素。
  8. It is possible to access the elements of a list only in sequence.:False

    • 可以透過索引隨機存取列表中的元素,而不僅僅是按順序。
  9. The len() returns a number of elements in a list.:True

    • len() 傳回列表中的元素個數。
  10. The sum() returns the sum of all the elements in a list.:True

    • sum() 傳回列表中所有元素的總和。
  11. It is impossible to shuffle elements randomly in a list.:False

    • 可以使用 random.shuffle() 隨機打亂列表中的元素。
  12. The concatenation operator ‘+’ is used to join two lists.:True

    • + 用於連線兩個列表。
  13. The multiplication operator * is used to replicate the elements in a list.:True

    • * 用於重複列表中的元素。
  14. The del operator is used to remove a specific element from a list.:True

    • del 可以用來刪除列表中的特定元素。
  15. Odd elements of a list can be displayed using list comprehension.:True

    • 可以使用列表推導式來顯示列表中的奇數元素。
  16. One can insert an element at a given index.:True

    • 可以使用 insert() 方法在指定索引處插入元素。
  17. The pop(1) removes an element from a list which is at index 1.:True

    • pop(1) 刪除索引 1 處的元素。
  18. The pop() removes the last element from a list.:True

    • pop() 如果不指定索引,則刪除最後一個元素。
  19. A string is a sequence of characters.:True

    • 字串是字元的序列。
  20. 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]

資料檢索與排序簡介

簡介

許多應用程式需要對物件或專案進行搜尋和排序。電腦可以輕鬆管理這項任務,從小型個人資料集到更詳細的資料函式庫,都可以高效地檢索資訊。

搜尋技術

線性搜尋和二分搜尋是兩種基本的搜尋技術。二分搜尋要求資料已經排序。

常見排序技術

包括氣泡排序、選擇排序、快速排序、插入排序和合併排序等。這些技術在不同的場景下有不同的效率和適用性。