python 推導式

小吉猫發表於2024-04-04

推導式說明

推導式(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()

相關文章