Python中的三元表达式、lambda表达式、列表和字典推导式

1. 三元表达式

1.1 语法

result =True时的结果 if 判断条件 elseFalse时的结果

1.2 例子

# 1. 最朴素的用法
>>> a = 10
>>> b = 20
>>> res = a if a < b else b
>>> res
10

# -----------------------

# 2. 定义函数时使用
>>> def max(x, y):
...     return x if x >=y else y
... 
>>> max(1, 2)
2
>>> max(2, 1)
2

# 3. 和lambda表达式结合
>>> f = lambda x,y: x - y if x >= y else y - x
>>> f(1, 2)
1
>>> f(2, 1)
1

# 4. 结合列表推导使用
>>> # 0 and 1 represent even and odd number respectively
>>> [0 if i % 2 == 0 else 1 for i in range(10)]
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

2. lambda表达式

2.1 语法

lambda 参数1, 参数2: 函数具体运算规则(返回值)

2.2 例子

>>> def sum(x, y):
...     return x + y
... 
>>> sum(10, 20)
30
>>> (lambda x,y: x+y)(10, 20)

>>> f = lambda x,y: x+y
>>> f(10, 20)
30

# 结合三元运算符
>>> f = lambda x,y: x - y if x >= y else y - x
>>> f(1, 2)
1
>>> f(2, 1)
1

匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。

lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。

对于单行代码函数,使用 lambda 表达式可省去定义函数的复杂过程,让代码更加简洁。
对于无需多次使用的函数,由于lambda 表达式在用完之后立即释放的特点,提升了程序性能

3. 列表和字典表达式(推导式)

3.1 语法

# 1. 列表推导式
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]  # [if 条件表达式] is optional

# 等价于
x = []
for 迭代变量 in 可迭代对象:
    if 条件表达式:
        x.append(表达式)

# 2. 字典推导式
{key: value for (key, value) in iterable [if 条件表达式]}

3.2 例子

# 1.1 普通用法
>>> x = [i*i for i in range(10)]
>>> x
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> x = [i for i in range(10) if i % 2 == 0]
>>> x
[0, 2, 4, 6, 8]

# 1.2 结合lambda表达式
>>> [i**2 if i%2==0 else i**3 for i in range(10)]
[0, 1, 4, 27, 16, 125, 36, 343, 64, 729]

# 1.3 多个for循环
>>> [(x, y) for x in range(5) for y in range(4)]
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]

# 1.4 
>>> a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
>>> b = [3, 5, 7, 11]
>>> res = [(x, y) for x in b for y in a if y % x == 0]
>>> res
[(3, 30), (3, 12), (3, 66), (3, 39), (3, 78), (3, 36), (3, 57), (5, 30), (11, 66), (11, 121)]

# 2.1 普通用法
>>> temp_dict = {"Key_1": "Value_1", "Key_2": "Value_2", "Key_3": "Value_3"}
>>> {(key,value) for (key, value) in temp_dict.items()}
{('Key_1', 'Value_1'), ('Key_3', 'Value_3'), ('Key_2', 'Value_2')}

# 2.2 互换key和value的位置
>>> {value: key for (key, value) in temp_dict.items()}
{'Value_1': 'Key_1', 'Value_2': 'Key_2', 'Value_3': 'Key_3'}

# 2.3 结合zip函数
>>> list_1 = ["A", "B", "C", "D"]
>>> list_2 = ["aa", "bb", "cc", "dd"]
>>> {i:j for i,j in zip(list_1, list_2)}
{'A': 'aa', 'B': 'bb', 'C': 'cc', 'D': 'dd'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值