一、三元表达式
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)的扩展,它们的语法结构非常相似
语法格式
|
1
|
{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))
# 有什么使用场景:他一般不会单独使用,会配合几个常见的内置函数使用=


浙公网安备 33010602011771号