CodeGym /課程 /Python SELF TW /列表生成

列表生成

Python SELF TW
等級 7 , 課堂 7
開放

7.1 乘法

在 Python 裡面有個方便的語法,可以用來增加元素的數量。為此,可以用簡單的乘法運算符。

字串生成

可以將其應用於字串:


print("媽媽" * 5)  # 輸出 媽媽媽媽媽媽媽媽媽媽
        

或者可以快速生成分隔線:


print("-" * 40)  # 輸出 ----------------------------------------
        

列表生成

還可以用來增加列表中的元素數量:


print(["apple"] * 5)  # 輸出 ['apple', 'apple', 'apple', 'apple', 'apple']
        

此運算符還有更實際的應用。例如,你想要創建一個由 10 個零組成的列表:


alist = [0] * 10
print(alist)  # 輸出 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
        

甚至還能創建二維陣列。例如,你想要創建一個 20x10 的陣列,填滿為零。這也很簡單:


alist = [[0] * 10] * 20 
print(alist)  # 輸出 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...]
        

這真的很方便,不是嗎?

7.2 List Comprehension

Python 裡有個超級有用的工具叫「List Comprehension」(列表推導式)——這是一個可以用來生成列表的簡便方法。這個語法工具允許你在一行短短的程式碼裡,對每個可迭代物件的元素應用表達式生成新列表。

比起解釋,不如展示給你看。這個語法工具看起來是這樣的:


[表達式 for 變量 in 序列]

其中:

  • 變量 — 某個變量的識別符,
  • 序列 — 變量接收的值序列(可以是列表、字串或用 range 函數獲得的對象),
  • 表達式 — 某個通常依賴於在生成器中使用的變量的表達式,這個表達式將用來填充列表的元素。

重要! 整個表達式必須放在方括號內。

這裡有一些使用生成器的例子:

通過生成器創建一個由n個零組成的列表:


alist = [0 for i in range(100)]
        

創建一個由整數的平方數組成的列表:


n = 5
alist = [i ** 2 for i in range(n)]            
        

創建一個由 1 到 n 的整數組成的列表:


n = 10
alist = [i + 1 for i in range(n)]
        

這樣還可以使用 random 模組的 randrange() 函數,生成一個由 1 到 9 隨機數組成的列表:


from random import randrange

n = 10
alist = [randrange(1, 10) for i in range(n)]
        

7.3 List Comprehension 的循環

List Comprehension 不僅可以用來生成列表。基本上,它就是一種書寫 for 迴圈的簡便方法。

例如,它可以用來從列表中簡單地打印出某些值:


alist = ["apple", "banana", "cherry"]
[print(x) for x in alist]
        

甚至可以從鍵盤輸入值:


a = [input() for i in range(int(input()))]
        

在這個例子中,列表將由從標準輸入讀取的字串構成:首先需要輸入列表元素的數量(這個值將作為 range 函數的參數),然後是指定數量的字串。

以你熟悉的方式,這段程式碼看起來會是這樣的:


n = int(input())
a = []
for i in range(n):
    x = input()  
    a.append(x)
        

實際上,List Comprehension 的用法有很多種:

可以使用條件語句:

在表達式中包含條件語句可以過濾元素,例如,創建只包含偶數的列表:


[x for x in range(10) if x % 2 == 0]
        

嵌套循環:

生成器允許使用嵌套循環,例如,用來創建多維數組:


[(x, y) for x in range(3) for y in range(3)]
        
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION