【Python】進(jìn)階學(xué)習(xí):列表推導(dǎo)式如何使用兩個(gè)for循環(huán)
?? 個(gè)人主頁:高斯小哥
?? 高質(zhì)量專欄:Matplotlib之旅:零基礎(chǔ)精通數(shù)據(jù)可視化、Python基礎(chǔ)【高質(zhì)量合集】、PyTorch零基礎(chǔ)入門教程?? 希望得到您的訂閱和支持~
?? 創(chuàng)作高質(zhì)量博文(平均質(zhì)量分92+),分享更多關(guān)于深度學(xué)習(xí)、PyTorch、Python領(lǐng)域的優(yōu)質(zhì)內(nèi)容?。ㄏM玫侥年P(guān)注~)
??一、引言
??Python的列表推導(dǎo)式(List Comprehension)是一種強(qiáng)大而簡潔的工具,它可以用來創(chuàng)建列表。通常,我們可能只使用一個(gè)for循環(huán)來創(chuàng)建列表,但Python也允許我們在列表推導(dǎo)式中使用兩個(gè)或更多的for循環(huán)。本文將通過通俗易懂的方式,講解如何在列表推導(dǎo)式中使用兩個(gè)for循環(huán),并通過實(shí)例舉一反三,讓你看完受益良多。
??二、一個(gè)for循環(huán)的列表推導(dǎo)式
??在開始討論兩個(gè)for循環(huán)的列表推導(dǎo)式之前,我們先回顧一下一個(gè)for循環(huán)的列表推導(dǎo)式。其基本語法如下:
[expression for item in iterable]
這里的expression
是對item
的某種操作,item
是從iterable
(可迭代對象,如列表、元組、集合、字符串、字典等)中取出的每個(gè)元素。
舉個(gè)例子,假設(shè)我們有一個(gè)數(shù)字列表,想要生成一個(gè)新列表,其中的元素是原列表中每個(gè)數(shù)字的平方:
numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares) # 輸出: [1, 4, 9, 16, 25]
??三、兩個(gè)for循環(huán)的列表推導(dǎo)式
現(xiàn)在,我們來看如何使用兩個(gè)for循環(huán)在列表推導(dǎo)式中。其基本語法如下:
[expression for item1 in iterable1 for item2 in iterable2]
這種結(jié)構(gòu)會(huì)首先遍歷iterable1
中的每一個(gè)item1
,然后對于每一個(gè)item1
,它都會(huì)遍歷iterable2
中的每一個(gè)item2
。expression
則是對item1
和item2
的某種操作。
假設(shè)我們有兩個(gè)列表,一個(gè)是顏色列表,另一個(gè)是大小列表。我們想要生成一個(gè)新的列表,其中的元素是每種顏色和大小的組合:
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
# 使用兩個(gè)for循環(huán)的列表推導(dǎo)式
combinations = [(color, size) for color in colors for size in sizes]
print(combinations) # 輸出: [('red', 'small'), ('red', 'medium'), ('red', 'large'), ('green', 'small'), ('green', 'medium'), ('green', 'large'), ('blue', 'small'), ('blue', 'medium'), ('blue', 'large')]
這個(gè)列表推導(dǎo)式會(huì)首先遍歷colors
列表中的每個(gè)顏色,然后在內(nèi)部循環(huán)中遍歷sizes
列表中的每個(gè)大小,生成一個(gè)元組(color, size)
,并添加到新列表中。
??四、列表推導(dǎo)式的嵌套循環(huán)與普通循環(huán)的對比
??為了更好地理解列表推導(dǎo)式中的嵌套循環(huán),我們可以將其與普通的嵌套循環(huán)進(jìn)行比較。以下是一個(gè)普通嵌套循環(huán)的例子,它實(shí)現(xiàn)了與上面列表推導(dǎo)式相同的功能:
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
combinations_normal = []
for color in colors:
for size in sizes:
combinations_normal.append((color, size))
print(combinations_normal) # 輸出與列表推導(dǎo)式相同
雖然這兩種方式都能達(dá)到同樣的效果,但列表推導(dǎo)式的語法更簡潔,更易于閱讀和理解。
??五、列表推導(dǎo)式中的條件表達(dá)式
??除了基本的操作外,我們還可以在列表推導(dǎo)式中加入條件表達(dá)式,進(jìn)一步篩選結(jié)果。條件表達(dá)式使用if
關(guān)鍵字,并放在for循環(huán)之后。
假設(shè)我們只想獲取大小為’medium’的顏色組合:
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
medium_combinations = [(color, size) for color in colors for size in sizes if size == 'medium']
print(medium_combinations) # 輸出: [('red', 'medium'), ('green', 'medium'), ('blue', 'medium')]
這里,if size == 'medium'
是一個(gè)條件表達(dá)式,它確保只有當(dāng)size
為’medium’時(shí),對應(yīng)的(color, size)
元組才會(huì)被添加到新列表中。
??六、舉一反三:更多應(yīng)用場景
??列表推導(dǎo)式不僅限于生成元組列表,它還可以用來生成任何類型的列表,包括數(shù)字列表、字符串列表、字典列表等。下面再舉幾個(gè)例子:
生成字典列表
keys = ['a', 'b', 'c']
values = [1, 2, 3]
# 使用zip函數(shù)和列表推導(dǎo)式生成字典列表
dict_list = [{k: v} for k, v in zip(keys, values)]
print(dict_list) # 輸出: [{'a': 1}, {'b': 2}, {'c': 3}]
生成字符串列表
words = ['hello', 'world', 'python']
# 將每個(gè)單詞轉(zhuǎn)換為大寫,并生成字符串列表
uppercase_words = [word.upper() for word in words]
print(uppercase_words) # 輸出: ['HELLO', 'WORLD', 'PYTHON']
生成列表的列表(二維列表)
rows = 3
cols = 4
# 生成一個(gè)3x4的二維列表,初始值都是0
matrix = [[0 for _ in range(cols)] for _ in range(rows)]
print(matrix) # 輸出: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
使用列表推導(dǎo)式進(jìn)行數(shù)值計(jì)算
numbers = [1, 2, 3, 4, 5]
# 計(jì)算列表中每個(gè)數(shù)字的平方根(使用math庫)
import math
square_roots = [math.sqrt(num) for num in numbers]
print(square_roots) # 輸出: [1.0, 1.4142135623730951, 1.7320508075688772, 2.0, 2.23606797749979]
??七、總結(jié)與收獲
??通過本文的學(xué)習(xí),我們掌握了如何在Python的列表推導(dǎo)式中使用兩個(gè)for循環(huán),并通過實(shí)例展示了其強(qiáng)大的功能和靈活性。列表推導(dǎo)式不僅使代碼更加簡潔易讀,而且提高了編程效率。通過舉一反三的方式,我們還探索了列表推導(dǎo)式在更多應(yīng)用場景中的使用,如生成字典列表、字符串列表、二維列表以及進(jìn)行數(shù)值計(jì)算等。
??在使用列表推導(dǎo)式時(shí),要注意保持代碼的清晰和可讀性,避免過度嵌套和復(fù)雜的表達(dá)式。同時(shí),也要善于利用條件表達(dá)式對結(jié)果進(jìn)行篩選,以得到更符合需求的結(jié)果。文章來源:http://www.zghlxwxcb.cn/news/detail-840878.html
??希望本文對你有所啟發(fā),讓你在Python編程的道路上更進(jìn)一步。通過不斷實(shí)踐和探索,你可以發(fā)現(xiàn)更多列表推導(dǎo)式的妙用,并將其應(yīng)用于實(shí)際項(xiàng)目中,提升編程效率和代碼質(zhì)量。文章來源地址http://www.zghlxwxcb.cn/news/detail-840878.html
到了這里,關(guān)于【Python】進(jìn)階學(xué)習(xí):列表推導(dǎo)式如何使用兩個(gè)for循環(huán)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!