推導式說明
推導式(Comprehensions)是Python中一種非常有用和靈活的工具,允許以簡潔的方式從一個或多個迭代器快速建立資料結構。Python支援的推導式主要有四種:列表(List)推導式、字典(Dictionary)推導式、集合(Set)推導式和生成器(Generator)推導式。
列表推導式
用途:快速生成列表。
語法:[返回值 for 元素 in 可迭代物件 if 條件]
返回值:返回一個新的列表
示例
#生成0到9每個數的平方,只包括偶數
#推導式寫法
squared_evens = [x**2 for x in range(10) if x % 2 == 0]
print(squared_evens)
#普通寫法
squared_evens = []
for x in range(10):
if x % 2 == 0:
squared_evens.append(x**2)
print(squared_evens)
# 輸出結果
[0, 4, 16, 36, 64]
# 列印九九乘法表。
#推導式寫法
[print(' '.join(f"{i}*{j}={i * j:2}" for j in range(1, i + 1))) for i in range(1, 10)]
#普通寫法
for i in range(1, 10):
for j in range(1, i+1):
print(f"{j}x{i}={i*j:2}", end="\t")
print()
# 輸出結果
1x1= 1
1x2= 2 2x2= 4
1x3= 3 2x3= 6 3x3= 9
1x4= 4 2x4= 8 3x4=12 4x4=16
1x5= 5 2x5=10 3x5=15 4x5=20 5x5=25
1x6= 6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7= 7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8= 8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9= 9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
result = [(i,j) for i in range(7) for j in range(20,25) if i>4 and j>23]
# 普通寫法
result = []
for i in range(7):
for j in range(20, 25):
if i > 4 and j > 23:
result.append((i, j))
# 輸出結果
[(5, 24), (6, 24)]
["{:04}.{}".format(i,"".join([chr(random.randint(97,122)) for j in range(10)])) for i in range(10)]
# 普通寫法
result_list = []
for i in range(10):
random_string = ""
for j in range(10):
random_character = chr(random.randint(97, 122))
random_string += random_character
formatted_string = "{:04}.{}".format(i, random_string)
result_list.append(formatted_string)
print(result_list)
# 輸出結果
['0000.zazvpobugw', '0001.xzwrgoiumx', '0002.klhgtboqll', '0003.voyrwbggrn', '0004.jumetngmuz', '0005.xxwxersszt', '0006.txphxctdsq', '0007.kxklliexjf', '0008.wekigtlifi', '0009.wisemnokrh']
字典推導式
用途:快速生成字典。
語法:{返回值 for 元素 in 可迭代物件 if 條件}
返回值:立即返回一個字典
示例
# 將單詞列表轉換為字典,其中鍵是單詞,值是單詞的長度。
# 推導式寫法
words = ["apple", "banana", "cherry"]
word_lengths = {word: len(word) for word in words}
普通寫法
words = ["apple", "banana", "cherry"]
word_lengths = {}
for word in words:
word_lengths[word] = len(word)
# 輸出結果
{'apple': 5, 'banana': 6, 'cherry': 6}
集合推導式
用途:快速生成集合。
語法:{返回值 for 元素 in 可迭代物件 if 條件}
返回值:立即返回一個集合
示例
# 生成一個包含0到9內所有偶數的集合。
# 推導式寫法
evens = {x for x in range(10) if x % 2 == 0}
# 普通寫法
evens = set()
for x in range(10):
if x % 2 == 0:
evens.add(x)
# 輸出
{0, 2, 4, 6, 8}
生成器推導式
用途:建立一個生成器,用於按需生成專案,節省記憶體。
語法:(返回值 for 元素 in 可迭代物件 if 條件)
返回值:返回一個生成器
示例
# 建立一個生成器,生成0到9的每個數字的平方。
# 推導式寫法
squared_numbers = (x**2 for x in range(10))
# 普通寫法
def squared_numbers_generator():
for x in range(10):
yield x**2
squared_numbers = squared_numbers_generator()