三元表達式、列表生成式和生成器生成式

三元表達式

能夠將if....else...雙分支流程變成一行python

語法:code

條件成立返回的值 if 判斷條件 else 條件不成立返回的值對象

# 求兩個值的大小
def max_min(a, b):
    if a > b:
        return a
    else:
        return b

max_min(10,23)
print(max_min(10,23))

# 能夠寫成三元表達式形式
def max_min(a, b):
    res = a if a > b else b
    return res

print(max_min(10,23))
# 需求: 讓用戶輸入用戶名,輸入的用戶若是是ank,爲其後綴添加_DSB

name = input("請輸入用戶名:").strip()
if name != 'ank':
    print(name)
else:
    print(name+'_DSB')

# 能夠寫成三元表達式形式
name = input("請輸入用戶名:").strip()
user_name = name if name != 'ank' else name + '_DSB'
print(user_name)

列表生成式

能夠實現一行實現生成列表索引

語法:ip

list = [取出的每個值、任意值 for 從可迭代對象中取出的每個值 in 可迭代對象]內存

for的右邊是循環次數,能夠取出可迭代對象中的每個值資源

for的左邊能夠爲當前列表添加值input

# 將l1中的值,依次取出,添加到l2中
l1 = [1, 238, 32, 4, 5]
l2 = [i for i in l1]
print(l2)

# 將l3列表中的每個人後綴都添加_dsb
l3 = ['tank','jason', 'sean', 'egon']
l4 = [i+'_dsb 'for i in l3]
print(l4)

list = [值 for 可迭代對象中取出的每個值 in 可迭代對象 if 判斷]generator

# 將name_list列表中的tank過濾掉,其餘人後綴都添加_dsb
name_list = ['tank', 'jason', 'sean', 'egon', 'tank']
new_name = [i+'_dsb' for i in name_list if i != 'tank']
print(new_name)

生成器表達式(生成式)

生成器生成式vs列表生成式

列表生成式:數據量小時使用,一次所有取出class

​ 優勢:能夠依賴索引取值,取值方便

​ 缺點:浪費資源

生成器生成式:將列表生式的[ ]換成()

數據量大時使用

​ 優勢:節省資源

​ 缺點:取值不方便

# 生成一個1000個值的生成器
# 用生成器生成式
g = (i for i in range(1,1001))
print(g)
>>>
# 獲得生成器的內存地址
<generator object <genexpr> at 0x000001DC7CDDF748>
# 用列表生成式實現
list = [i for i in range(1,1001)]
print(list)
>>>
[1, 2, 3, ....., 998, 999, 1000]
相關文章
相關標籤/搜索