1. 程式人生 > 其它 >Python的三元表示式、列表生成式和字典生成式

Python的三元表示式、列表生成式和字典生成式

Python的三元表示式、列表生成式和字典生成式

  • 三元表示式
  • 列表生成式
  • 字典生成式
  • 匿名函式

一、三元表示式

  1. 三元表示式的格式

    當功能需求僅僅是二選一的情況下,推薦使用三元表示式

值1 if 條件 else 值2
'''條件成立用值1 不成立用值2'''

    三元表示式在函式中使用

def my_max(a, b):
    if a > b:
        return a
    else:
        return b
def my_max(a, b):
    return a if a > b else b

  2. 示例

is_free = input('
is_free>>>:').strip() is_free = '收費' if is_free=='y' else '免費'

    條件成立採用if前面的值 if 條件 else 條件不成立採用else後面的值

    三元表示式儘量不要巢狀使用

res = '乾飯' if 10 > 2 else '不幹飯'
print(res)
res = '乾飯' if 10 > 2 else ('不管飯' if 2 >5 else '寫的啥!')
print(res)
is_free = input('電影是否收費(y/n)>>>:').strip()
if is_free == 'y': print('收費') else: print('免費') print('收費' if is_free == 'y' else '免費')
username = input('username>>>:')
res = 'NB' if username == 'jason' else 'SB'
print(res)

二、列表生成式

  使用頻率很高

  1. 列表生成式的格式

[通過條件判斷之後的變數名 for 變數名 in 可迭代物件 if 條件]
l = [1,2,3,4,5,6,7]
res = [i+1 for
i in l if i != 4]

   2. 示例

name_list = ['jason', 'kevin', 'tony', 'jerry']
# 給列表中所有的人名加上_DSB字尾
'''傳統做法'''
# 1.定義一個空列表
new_list = []
# 2.for迴圈老列表
for name in name_list:
# 3.生成新的名字
    new_name = '%s_DSB'%name
# 4.新增到新的列表中
    new_list.append(new_name)
    print(new_list)
'''列表生成式'''
res = ['%s_DSB' % name for name in name_list]
print(res)

'''傳統做法'''
# 1.定義一個空列表
new_list = []
# 2.for迴圈老列表
for name in name_list:
    # 3.生成新的名字
    if name == 'jason':
        continue
    else:
        new_name = '%s_DSB'%name
        # 4.新增到新的列表中
        new_list.append(new_name)
print(new_list)
'''列表生成式'''
res = ['%s_DSB' % name for name in name_list if name != 'jason']
print(res)

三、字典生成式

  1. 列舉

enumerate(l,start=1)

    enumerate(l1)

    針對該方法使用for迴圈取值,每次會產生兩個結果。

    第一個是從0開始的數字

    第二個是被迴圈物件裡面的元素

    還可以通過start引數控制起始位置

for i, j in enumerate(l1, start=1):
    print(i, j)

name_list = ['jason', 'kevin', 'tony', 'jerry']
res = {i: j for i, j in enumerate(name_list) if j != 'jason'}
print(res)

res1 = {i for i, j in enumerate(name_list)}
print(res1, type(res1))

  2. 字典

res = { i:j for i,j in enumerate(l)}
# l1 = ['name', 'age', 'hobby']
# l2 = ['jason', 18, 'read']
# new_dict = {}
# for i in range(len(l1)):
#     new_dict[l1[i]] = l2[i]
# print(new_dict)

# count = 0
# for i in l1:
#     print(count,i)
#     count += 1

  3. 集合

res = {i for i,j in enumerate(l)}
# 小括號不是生成式 是迭代器

四、匿名函式

  1. 匿名函式的概念

    沒有名字的函式

  2. 匿名函式的語法結構

lambda 形參:返回值

    匿名函式一般不會單獨使用,都是配合其他函式一起使用

  3. 示例

print(lambda x:x**2)
def index():
    pass
print(index)
print((lambda x: x ** 2)(2))
res = lambda x: x ** 2
print(res(2))

  4. map() 對映

# map()  對映
# map(函式名,可迭代物件) 結果是一個迭代器
l = [1, 2, 3, 4, 5, 6, 7, 8, 9] def index(n): return n ** 2 print(list(map(lambda x:x**2, l)))