三元表达式、列表、字典生成式、匿名函数
一、三元表达式
1、引入
比价两个数的大小,正常函数写法
def my_max(a, b): if a > b: return a else: return b my_max(1, 2)
2、三元表达式写法
def my_max(a, b): return a if a > b else b res=my_max(1, 2) print(res)
3、语法结构:
条件成立返回if前面的值 if 条件 else 条件不成立返回else后面的值
三元表达式的使用场景:只有当需求功能是二选一的情况下,才使用三元表达式
res = '干饭' if 2 > 1 else '不干饭' print(res) #还可以支持嵌套 is_beautiful = True res = '干饭' if 1 > 2 else '学习' if False else '喜欢' if is_beautiful == True else '不喜欢' print(res)
只要条件成立就返回对应的值
三元表达式解题案例:
输入一个列表arr
,返回元素值是元素下标的倍数的元素个数。列表的下标从
0
开始。
print(sum([1 if x==0 or (i>0 and x%i==0) else 0 for i,x in enumerate(arr)]))
二、列表生成式
python内置的非常简单却强大的用来创建list的生成式,是一种灵活快速的生成列表的方式
variable =[out_exp for var in iterable if condition] # out_exp:表达式 # for var in iterable:循环 # if condition 判断
1、引入
name_list = ['kevin', 'tank', 'tony', 'jerry'] # 1. 给列表中的所以名称加一个后缀_DSB # 2. 定义一个空列表用来存储拼接之后的值 new_name_list = [] # 3. 循环列表 for name in name_list: # res = '%s_DBS' % name # res = name +'_DSB' new_name_list.append('%s_DBS' % name) print(new_name_list)
2、列表生成式写法
name_list = ['kevin', 'tank', 'tony', 'jerry'] res = [name+'_DSB' for name in name_list] print(res)
3、给列表中的所有名称都加一个后缀_DSB, 除了jerry不加
name_list = ['kevin', 'tank', 'tony', 'jerry'] for name in name_list: if name != 'jerry': new_name_list.append('%s_DSB' % name) print(new_name_list)
列表生成式写法
name_list = ['kevin', 'tank', 'tony', 'jerry'] # res = [name+'_DSB' for name in name_list if name != 'jerry'] res = ['%s_DSB' % name if name != 'jerry' else name for name in name_list] print(res) alist = [i if i%2 esle 1 for i in range(10)] print(alist) [' ', 1, ' ', 3, ' ', 5, ' ', 7, ' ', 9]
三、字典生成式
字典生成式又叫字典推导式
字典生成式(Dictionary Comprehension)是列表推导式(List Comprehension)的扩展,它们的语法结构非常相似
语法格式
{key_expression: value_expression for item in iterable if condition}
其中:
key_expression
表示字典键的表达式,用于生成字典中的键。value_expression
表示字典值的表达式,用于生成字典中对应键的值。item
是迭代的元素,可以是一个变量名或者是多个变量名的结构(比如元组解包)。iterable
是可迭代对象,例如列表、元组、集合、字符串等。if condition
是可选的条件表达式,用于对迭代的元素进行筛选。只有满足条件的元素才会被包含在生成的字典中。
1、enumerate 枚举
循环enumerate方法可以得到两个值:索引 和 元素
列表使用 enumerate方法
seasons = ['Spring', 'Summer', 'Fall', 'Winter'] l = list(enumerate(seasons)) print(l) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
字典使用enumerate方法
dict = {'one': 1, 'two': 2, 'three': 3} for i, j in enumerate(dict): print(i, j) 0 one 1 two 2 three
2、字典生成式
将列表里面的元素转换成字典,kevin除外
l = ['kevin', 'tank', 'tony', 'jerry'] res = {i: j for i, j in enumerate(l) if j != 'kevin'} print(res) /usr/local/bin/python3.6 /Users/sanpangdan/Desktop/python_fullstack/day16.py {1: 'tank', 2: 'tony', 3: 'jerry'}
案例1
# 将一个字典中的键值对进行交换,生成一个新的字典。 # 示例输入:{'a': 1, 'b': 2, 'c': 3} # 示例输出:{1: 'a', 2: 'b', 3: 'c'} d1 = {'a': 1, 'b': 2, 'c': 3} d2 = {d1.get(char): char for char in d1} print(d2)
案例2:v表达式嵌套列表生成式
# 将一个列表中的元素按照长度进行分组,生成一个字典,其中键为长度,值为对应长度的元素列表。 # 示例输入:['apple', 'banana', 'orange', 'pear', 'kiwi'] # 示例输出:{5: ['apple'], 6: ['banana', 'orange'], 4: ['pear','kiwi']} lst = ['apple', 'banana', 'orange', 'pear', 'kiwi'] new_dict = {len(item): [x for x in lst if len(x) == len(item)] for item in lst} print(new_dict)
关键之处
v的表达式使用了列表生成式 [x for x in lst if len(x) == len(item)] 满足长度和k相等的条件都留下做列表元素
四、集合生成式
l = ['kevin', 'tank', 'tony', 'jerry'] res = {i for i, j in enumerate(l)} print(res) {0, 1, 2, 3}
五、匿名函数
1、没有名字的函数
之前使用def关键字定义的函数都是有名函数,有名字的函数
语法格式: lambda 形参:返回值 res = lambda x: x+1 # res(1) # print(res(1)) print((lambda x: x +1)(2)) # 有什么使用场景:他一般不会单独使用,会配合几个常见的内置函数使用=