iT邦幫忙

0

Python 列表 [list] List Comprehension 快速生成列表

  • 分享至 

  • xImage
  •  

在 Python 中,list 是一種有序的、可變的集合,使用方括號 [] 表示。你可以在列表中存儲任何數據類型,
包括整數、字串、甚至其他列表。Python 提供了許多內建的函數和方法來處理列表。

List 的定義與常用操作:

fruits = ['apple', 'banana', 'cherry']

# 使用index訪問列表中的元素
print(fruits[0])  # 'apple'

# 使用index修改列表中的元素
fruits[1] = 'blueberry' # ['apple', 'blueberry', 'cherry']

# 在列表末尾添加元素
fruits.append('mango') # ['apple', 'blueberry', 'cherry','mango']

# 刪除列表中的元素
fruits.remove('apple') # ['blueberry', 'cherry','orange']

# 獲取列表的長度
print(len(fruits))  # 3

其他常用的 List 函數和方法:

fruits = ['apple', 'banana', 'cherry']

函數/方法 描述 範例
append(x) 在列表末尾添加元素 x fruits.append('mango') # ['apple', 'blueberry', 'cherry','mango']
insert(i, x) 在索引 i 處插入元素 x fruits.insert(1, 'grape') #['apple', 'grape','banana', 'cherry']
remove(x) 刪除列表中的第一個值為 x 的元素 fruits.remove('apple') #['grape','banana', 'cherry']
pop([i]) 移除並返回列表中索引為 i 的元素(默認為最後一個元素) fruits.pop(2) #['apple', 'banana']
sort() 就地排序列表中的元素 fruits.sort() #['apple', 'banana', 'cherry']
reverse() 將列表中的元素反轉 fruits.reverse() #['cherry','banana','apple']
extend(iter) 使用一個可迭代對象擴展列表 fruits.extend(['kiwi', 'peach']) #['apple', 'banana', 'cherry','kiwi', 'peach']
index(x) 返回列表中找到的第一個值為 x 的元素的索引 fruits.index('banana')#2
count(x) 返回列表中值為 x 的元素個數 fruits.count('apple') #1
clear() 清空列表中的所有元素 fruits.clear() #[]
copy() 返回列表的一個淺拷貝 new_fruits = fruits.copy() #['apple', 'banana', 'cherry']
len(list) 返回列表的長度 len(fruits) #3

列表的進階操作:

List Comprehension 快速生成列表

Before 一般列表生成式:

number =[]
for i input().split():
    nums.append(int(i))

After 快速列表生成式:

nums =[int(i) for i in inpiut().split()]

List Comprehension 快速生成列表基本上有三個元素: 運算式 ,for loop, if條件判斷(options)

語法解說:
遍例輸入內容轉換為整數並加入到新的列表
int_list = [int(i) for i in input().split()]
這段代碼的功能說明:
input().split()
input() 從使用者獲取輸入,通常輸入一行內容。
split() 將這行內容按空格分割成一系列子字串,並返回一個包含這些子字串的列表。
例如,假設使用者輸入 "1 2 3 4",那麼 input().split() 會得到列表 ["1", "2", "3", "4"]。

int(i) for i in input().split()列表生成式
這裡的列表生成式遍歷 input().split() 返回的每一個子字串 i,並將它轉換為整數 int(i)。每個轉換的結果會加入到新的列表中。這樣,就可以得到一個包含整數的列表。

將結果存入 int_list
最終,所有轉換完成的整數會組成一個列表,並賦值給 int_list。如果用戶輸入的是 "1 2 3 4",則 int_list 的值將是 [1, 2, 3, 4]。

  • 其他範例語法:
#一般列表生成式
squares = []
for i in range(5):
    if i % 2 == 1:
        squares.append(i ** 2)
        
#快速列表生成式   
squares = [i ** 2 for i in range(5) if i % 2 ==1]
print(squares)  # [0, 1, 4, 9, 16]
  • squares =:將生成的列表賦值給變數 squares。

  • range(5):
    range(5) 是一個 Python 內建函數,會生成一個從 0 到 4 的整數序列,即 [0, 1, 2, 3, 4]。這段程式碼中,range(5) 生成了五個數字:0, 1, 2, 3, 4,並將每個數依序賦值給變數 i。

  • i ** 2 for i in range(5):
    這是列表生成式的核心部分。它會遍歷 range(5) 中的每一個數字 i,對每個 i 執行平方操作 (i**2),然後將結果添加到新的列表中。

  • if i % 2 == 1 :這是一個條件判斷,只有當 i 除以 2 的餘數為 1 (也就是說,i 是奇數) 時,才會將 i 的平方加入到新的列表中。

List切片操作:index範圍取值

sub_list = fruits[1:3]  # 返回第1到第3個元素,不包括第3個

List列表與其他數據類型轉換

字符串轉換為列表

chars = list("hello")  # ['h', 'e', 'l', 'l', 'o']

將列表轉換為字符串

string = ','.join(['a', 'b', 'c'])  # 'a,b,c'

enumerate 同時獲取元素的索引和值

enumerate() 是一個內建函數,用於在迭代列表或其他可迭代對象時,同時獲取元素的索引和值。這在需要同時知道元素位置和內容時非常有用,且讓代碼更簡潔。

students = ["Alice", "Bob", "Charlie"]

for index, student in enumerate(students):
    print(f"{index}: {student}")
#0: Alice
1: Bob
2: Charlie

enumerate() 的工作方式:
enumerate() 會將每個元素與其索引一起返回,這樣我們就可以輕鬆獲取每個元素的索引和內容。例如:

  • index 是當前元素的索引
  • student 是當前索引對應的值

使用 start 參數
如果希望索引從 1 開始而不是 0,可以設置 start=1:

for index, student in enumerate(students, start=1):
    print(f"{index}: {student}")
#1: Alice
2: Bob
3: Charlie

enumerate() 與列表生成式

enumerate() 也可以和列表生成式一起使用,快速生成新列表。例如,對每個元素進行操作並生成包含其索引的描述:

students_with_index = [f"{index}: {student}" for index, student in enumerate(students)]
print(students_with_index)
#['0: Alice', '1: Bob', '2: Charlie']

重要觀念:

項目 值傳遞(Copy by Value) 引用傳遞(Copy by Reference)
對象類型 不可變對象(如 int, float, str, tuple 可變對象(如 list, dict, set
複製的內容 複製變數的值,即新的變數和原變數值獨立 複製對象的引用,新的變數和原變數指向相同的內存地址
修改是否影響原變數 不會影響原變數 修改新變數會影響原變數
範例 x = 10y = xy = 20不會影響 x 的值 a = [1, 2, 3]b = ab.append(4)會影響 a 的值
用法場景 適用於不變的數據,如數字、字串等 適用於需修改的數據,如列表、字典等

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言