[ python ] 各類推導式

各類推導式,主要使用示例演示用法python

 

 列表生成式

示例1:求0-9每一個數的平方編程

li = [x*x for x in range(10)]
print(li)

# 執行結果:
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 列表生成式,使用[],括號內是for循環語句數組

 

示例2:求0-9能被3整除的數字blog

li = [x for x in range(10) if x % 3 == 0]
print(li)

# 執行結果:
# [0, 3, 6, 9]

 

在這個列表生成式中,不斷有for循環,並且還用到了if判斷語句

列表生成式的格式:
    (1)[元素 for 元素 in 可迭代的類型 ]
    (2)[元素 for 元素 in 可迭代的類型 if 元素須要知足的條件]內存

 

 生成器表達式

仍是上面兩個例子,使用生成器表達式寫出來:字符串

示例1:求0-9每一個數的平方get

g = (x for x in range(10) if x % 3 == 0)

print(g)    # generator 這裏的g就是一個生成器了,將中括號換成小括號就變成了生成器表達式

for i in g:
    print(i)

# 執行結果:
# <generator object <genexpr> at 0x00000194C9FA34C0>
# 0
# 3
# 6
# 9

 

示例2:求0-9能被3整除的數字generator

g = (x for x in range(10) if x % 3 == 0)

print(next(g))
print(next(g))
print(next(g))
print(next(g))

# 執行結果:
# 0
# 3
# 6
# 9

 

列表生成式和生成器表達式總結:
    1. 把列表生成式的中括號換成小括號就是生成器表達式
    2. 列表解析與生成器表達式都是一種便利的編程方式,只不過生成器表達式更節省內存for循環

 

示例3:找到嵌套列表中名字含有兩個'e'的全部名字class

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
         ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

# for name in names:
#     for i in name:
#         if i.count('e') == 2:
#             print(i)

# 若是沒法一次寫出嵌套的列表生成式,能夠先使用for循環寫出來
list_name = [x for name in names for x in name if x.count('e') == 2]
print(list_name)

# 執行結果:
# ['Jefferson', 'Wesley', 'Steven', 'Jennifer']

 

 字典推導式

示例1:將字典中的key和value對調

# 注意字典推導式中,返回的必定是一個字典類型:mcase[i]:i
dic = {mcase[i]:i for i in mcase}
print(dic)

# 執行結果:
# {10: 'a', 34: 'b'}

 

示例2:合併大小寫對應的value值,將k統一成小寫

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}

dic = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase}
print(dic)

# 執行結果:
# {'a': 17, 'b': 34, 'z': 3}

# 這個示例中用到了 get() 這個知識點:
#     mcase.get(k.lower(), 0) 當字典mcase中存在k.lower()的時候則直接返回,不然返回默認填寫的0

 

 集合推導式

集合數據類型,有自帶的去重功能

squared = {x**2 for x in [1, -1, 2]} # 返回 1, 1, 2 集合自帶去重的功能

print(squared)

# 執行結果:
# {1, 4}

 

其餘一些示例:

# 例1:  過濾掉長度小於3的字符串列表,並將剩下的轉換成大寫字母

li = ['a', 'abc', 'c', 'dddd']

l1 = [i.upper() for i in li if len(i) >= 3]
print(l1)

 

# 例2:  求(x,y)其中x是0-5之間的偶數,y是0-5之間的奇數組成的元祖列表

l1 = [(x, y) for x in range(1, 5) if x%2==0 for y in range(1, 5) if y%3==0]
print(l1)

 

# 例3:  求M中3,6,9組成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

M = [[1,2,3],[4,5,6],[7,8,9]]
l1 = [i[2] for i in M]
print(l1)
相關文章
相關標籤/搜索