列表解析,集合解析,字典解析,

1. 列表解析

1.1. 語法: 

  [ 表達式 for 元素 in 可迭代對象 if 條件 ]

    • [ ]表示要生成一個列表
    • 表達式為會放入生成的列表中的元素
    • for表示for循環
    • if為可選條件, 如果if存在那麼只有當if的條件為真的時候才能將表達式放入生成的列表當中

1.2. 用途:

  1. 列表的初始化,用於生成一些有規律的列表

  2. 用於列表元素的篩選(挑選/剔除出一個列表當中滿足某些特殊要求的元素

ps: 關於第一點: 有規律表示的是可以使用表達式表示出來的規律,比如正數(n > 0),奇數(n % 2 != 0), 平方數(n**2)........但是諸如質數,無理數這一類不能簡單的表示的元素是無法使用列表解析的(當然,也不是絕對的,不強擼灰飛煙滅的道理大家都懂)

1.3. 舉例說明:

1.3.1. 生成一個列表他們是1-9所有整數的平方

1.3.1.1. 使用普通的迭代實現
lis = []
for i in range(1,10):
    lis.append(i**2)

結果:

  [1, 4, 9, 16, 25, 36, 49, 64, 81]

1.3.1.2. 使用列表解析
lis = [ _**2 for _ in range(1, 10)]
# _也是一個普通的變量,但是由於此處的表達式僅僅用於迭代,不會二次使用,所以使用_是為了告知閱讀的人這一點,提高代碼可讀性
# 如果依舊不明白可以查看Python標識符的命名規則

結果:

  [1, 4, 9, 16, 25, 36, 49, 64, 81]

1.3.2. 篩選出列表中為奇數的元素

1.3.2.1 使用迭代:
res = []
for i in lis:
    if i % 2 != 1:
        res.append(i)
res

結果:

  [4, 16, 36, 64]
 
1.3.2.2 使用列表解析:
res = [ _ for _ in lis if _ % 2 != 1 ]
res

  

結果:

  [4, 16, 36, 64]

2. 集合解析:

有了前面的列表解析作為鋪墊,集合解析就簡單很多了.

2.1. 語法:

   {表達式 for 元素 in 可迭代對象 if 條件 }

這個與列表解析唯一的區別在於方括號 []"換成了花括號 "{}"

2.2. 舉例說明(有了前面的鋪墊,此處所有的代碼我將會寫在同一個腳本中):

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}

結果:

  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}
  s4 = {13, 3, 5, 15}
 

3. 字典解析:

3.1. 語法:

  { 鍵 : 值 for 元素 in 可迭代對象 if 條件 }

集合和字典的區別就在於冒號 " : ",集合的表達式是單個元素,而字典是鍵值對,所以我就不再舉例說明,你可以自己下去慢慢的摸索.

猜你喜欢

转载自www.cnblogs.com/ltozvxe/p/12394328.html