首页 > 其他分享 >三元表达式、列表、字典生成式和匿名函数

三元表达式、列表、字典生成式和匿名函数

时间:2023-12-05 21:56:36浏览次数:21  
标签:name res 生成式 list 列表 匿名 print 字典

一、三元表达式

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))

# 有什么使用场景:他一般不会单独使用,会配合几个常见的内置函数使用=
复制代码

 

标签:name,res,生成式,list,列表,匿名,print,字典
From: https://www.cnblogs.com/Jessica-Jmm/p/17878371.html

相关文章

  • 【7.0】列表字典推导式
    【一】语法列表推导式可以利用列表,元组,字典,集合等数据类型,快速的生成一个特定需要的列表。语法格式如下[表达式for迭代变量in可迭代对象[if条件表达式]]【二】列表推导式【1】为什么要用列表推导式?列表推导式为我们提供了一种从序列创建列表的简单途径,它书写......
  • 可持久化Trie树(字典树)
    举例子:插入cat:插入cup:插入soup:插入cut:可持久化数据结构的重要问题就是解决区间的查询问题:例题,洛谷4735: M个操作,操作1:添加操作,添加一个树x,序列长度+1操作2:询问操作,找到一个位置p,满足l<=p<=r,使得a[p]^a[p+1]^...^a[N]^x最大,输出最大值 分析:令S[k]=a......
  • 字典树模板
    #include<bits/stdc++.h>usingnamespacestd;structtrie{intn;vector<array<int,26>>trans;vector<int>cnt;trie():n(0){new_node();}intnew_node(){trans.push_back({});trans.back()......
  • 实体类(多层嵌套)生成FastReport需要的frd字典文件
    #region根据模型生成FastReport需要的Frd字典文件///<summary>///生成frd文件内容///</summary>privatestaticStringBuilderstringTouBu=newStringBuilder();///<summary>///根据模型生成FastReport需要的F......
  • python基础-字典
    1、字典定义字典是一种可变的容器,可以存储任意类型的数据字典中的每个数据都是用"键"(key)进行索引,而不像序列可以用下标进行索引【集合可以用下标进行搜索】字典中的数据没有先后关系,字典的存储是无序的【集合set存储也是无序的】字典的表示方式是以{}括起来,以冒号(......
  • 乘风破浪,遇见生成式人工智能(Generative AI)之初学者课程,第一章: 生成式人工智能和LLM
    课程资源https://github.com/microsoft/generative-ai-for-beginners课程学习环境设置Fork课程仓库到自己的账号https://github.com/microsoft/generative-ai-for-beginners/fork点击'CreateFork'按钮即可。准备GitHubCodespaces为了避免运行代码时出现任何依赖性......
  • 精通C#要点:解析委托、匿名方法与事件
    文章目录委托(Delegate)委托的特性声明委托实例化委托委托的多播(MulticastingofaDelegate)委托的用途匿名方法委托实际应用场景事件(Event)声明事件事件实例1事件实例2事件实例3委托和事件的区别总结 委托(Delegate)委托是对具有特定参数列表和返回类型的方法的......
  • 一键导出数据库中表结构定义(数据字典)的工具
    导出数据库中标的定义,即所谓的数据字典一、新建maven工程中加入依赖在maven工程的pom.xml中添加依赖<dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>1.0.5</version></dependency>......
  • 使用样式表和 rcParams字典自定义 Matplotlib属性和样式
    3种方式自定义Matplotlib的属性和样式1.运行时通过rcParams字典动态设置2.使用样式表3. 更改matplotlibrc文件在运行时设置rcParams优先于样式表、样式工作表优先于文件matplotlibrc即1>2>31. 运行时通过rcParams字典动态设置通过字典matplotlib.rcParams,动态修改......
  • 学习笔记-字典树
    字典树一般有两个作用(我学到的),一个是查询单词的出现,一个是计算最大异或值。字典树的ch数组该如何理解?其实ch[p][j]指的是从p是否有一条值为为j的边到下一个点,如果ch[p][j]为0,就是没有。例题1luoguP2580https://www.luogu.com.cn/problem/P2580这题就是存字串的裸题,唯一要......