[ 表達式 for 元素 in 可迭代對象 if 條件 ]
列表的初始化,用於生成一些有規律的列表
ps: 關於第一點: 有規律表示的是可以使用表達式表示出來的規律,比如正數(n > 0),奇數(n % 2 != 0), 平方數(n**2)........但是諸如質數,無理數這一類不能簡單的表示的元素是無法使用列表解析的(當然,也不是絕對的,不強擼灰飛煙滅的道理大家都懂)
lis = [] for i in range(1,10): lis.append(i**2)
結果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
lis = [ _**2 for _ in range(1, 10)] # _也是一個普通的變量,但是由於此處的表達式僅僅用於迭代,不會二次使用,所以使用_是為了告知閱讀的人這一點,提高代碼可讀性 # 如果依舊不明白可以查看Python標識符的命名規則
結果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
res = [] for i in lis: if i % 2 != 1: res.append(i) res
結果:
res = [ _ for _ in lis if _ % 2 != 1 ] res
結果:
[4, 16, 36, 64]
有了前面的列表解析作為鋪墊,集合解析就簡單很多了.
2.1. 語法:
{表達式 for 元素 in 可迭代對象 if 條件 }
這個與列表解析唯一的區別在於方括號 []"換成了花括號 "{}"
s1 = {1, 2, 6, 8, 10, 12, 13, 17, 20} s2 = {1, 13, 17} s3 = {3, 4, 5, 6, 10, 12, 13, 14, 15, 16} from random import randint # 用於生成隨機元素 from random import randint # 使用迭代創建集合 s1 = set() for i in range(10): s1.add(randint(1,20)) print("s1 =", s1) #使用迭代篩選出其中的奇數 s2 = set() for i in s1: if i & 1 == 1: s2.add(i) print("s2 = ",s2) # 使用集合解析創建集合 s3 = {randint(1,20) for _ in range(10)} print("s3 =", s3) # 使用集合解析篩選其中的奇數元素 s4 = { _ for _ in s3 if _ & 1 != 0 } print("s4 =", s4)s4 = {13, 3, 5, 15}
結果:
{ 鍵 : 值 for 元素 in 可迭代對象 if 條件 }
集合和字典的區別就在於冒號 " : ",集合的表達式是單個元素,而字典是鍵值對,所以我就不再舉例說明,你可以自己下去慢慢的摸索.
原文:https://www.cnblogs.com/ltozvxe/p/12394328.html