首页 > 其他分享 >15表达/生成式 内置函数

15表达/生成式 内置函数

时间:2023-07-26 09:44:59浏览次数:37  
标签:内置 15 name res 生成式 list l1 print jason

三元表达式

使用场景:二选一的时候 推荐使用三元表达式

#如果用户名是jason则打印管理员 否则打印DSB(正常写的时候)
 username = input('username>>>:').strip()
 if username == 'jason':
     print('管理员')
 else:
     print('DSB')
"""不够简化"""
三元表达式
    值1 if 条件 else 值2
条件如果成立则使用值1(if前面的数据)
条件如果不成立则使用值2(else后面的数据)

 username = input('username>>>:').strip()
 res = '管理员' if username == 'jason' else 'DSB'
 print(res)

"""使用三元表达式代码更简化
"""
补充:针对if分支结构 也有简化版本(了解即可)
'''子代码块都只有简单的一行情况下 也可以简写  没有三元表达式简单 但是也有人用'''
name = 'jason'
if name == 'jason': print(name)
else: print('嘿嘿嘿')
用的少,别人如果这样写要知道什么意思

 各种生成式

(1)列表生成式

#name_list = ['jason', 'kevin', 'tony', 'oscar', 'jerry']
'''需求:将列表中所有的人名后面加上_DSB'''

原来方法:
new_list = []
 # 2.for循环列表获取每一个人名
 for name in name_list:  # 'jason'    'kevin'   字符串
     # 3.字符串末位拼接_DSB
     res = name + '_DSB'
     # 4.添加到新的列表中
     new_list.append(res)
 print(new_list)
#列表生成式简化方法
res = [name+'_SB' for name in name_list]
print(res)



列表生成式复杂用法:还具备筛选能力
res = [name+'_SB' for name in name_list if name == 'jason']
print(res)
'''列表生成式中值允许出现for和if 不能出现else 因为会产生歧义(for和if都能结合else)'''

 

 

 (2)字典生成式

l1 = ['name', 'age', 'pwd']
l2 = ['jason', 18, 123]
# 需求:将上述两个列表分别制作成字典的键值


#普通方法:
# 1.定义一个空字典
 new_dict = {}
# 2.每次循环都要拿到两个列表中对应的元素(索引相等)
 for i in range(len(l1)):
# 3.索引取值即可
 new_dict[l1[i]] = l2[i]
 print(new_dict)
# 字典生成式(更加简化)
res = {l1[i]: l2[i] for i in range(len(l1))}
print(res)  # {'name': 'jason', 'age': 18, 'pwd': 123}


res = {l1[i]: l2[i] for i in range(len(l1)) if i == 1}
print(res)  # {'age': 18}

'''字典生成式中值允许出现for和if 不能出现else 因为会产生歧义(for和if都能结合else)'''

(3)集合生成式

res = {i for i in range(10)}
print(res, type(res))


res = {i for i in range(10) if i != 2}  (也可以加if判断   !=表示不等于)
print(res, type(res))

"""没有元组生成式 依据上述写法得到的时候后续我们要学习的知识:迭代器"""

 匿名函数(无函数名,调用时候需要结合其他函数一起使用)

#定义匿名函数:

lambda  形参:返回值




①如果用普通函数来表示
def index(x):
    return x+2
②如果用lambda表示
print(lambda x:x+2)
# max:统计最大值
①
l1 = [11,32,41,22,13,66,54,78,96,34,54,99,35]
 print(max(l1))  # 直接获取数据集中最大的元素值


②
info = {
    'Aason':9999999,
    'Jacob':123,
    'zark':1000,
    'berk':33
}    #求:薪资最高的人的姓名
print(max(info))  # zark   这时候不可以直接这样写,因为字典比较的是key键的首字母
'''
max底层可以看成是for循环依次比较 针对字典默认只能获取到k
获取到k之后如果是字符串的英文字母 则会按照ASCII码表转成数字比较
    A~Z:65-90
    a~z:97-122
'''

#那正常怎么写呢?
 def index(k):
     return info[k]  #返回值是字典info里面k键值对应的v值
 print(max(info,key=index))  # 后面的key = index解释:打印index其实就是index的返回值,而index的返回值就是字典info[k]表示字典v值,意思就是比较v值,然后返回k
'''key对应的函数返回什么 max就以什么做比较的依据'''
# 比较的是v 返回的是k    key相当于是可以更改比较规则的参数


#那匿名函数如何写呢?
# 上述代码可以简写 因为函数功能很单一
print(max(info, key=lambda key:info[key]))  # Aason
#lambda 形参:返回值   ,其中key:info[key]表示k值:v值

常见内置函数

(1)map映射函数

l1 = [11, 22, 33, 44, 55]
# 需求:元素全部自增10

①列表生成式
print(i+10 for i in l1)  #<generator object <genexpr> at 0x000002597D64FFC0>得到位置代码

printlist((i+10 for i in l1))n  #[21, 32, 43, 54, 65]

②内置函数
def index(n):
     return n + 10
 res = map(index,l1)
 print(res)  # 迭代器(节省空间的 目前不用考虑)  #迭代器位置代码
 print(list(res))  # [21, 32, 43, 54, 65]  #转换成列表

#可以配合学过的匿名函数lambda使用
res = map(lambda x: x + 10, l1)
 print(list(res))  # [21, 32, 43, 54, 65]

(2)zip拉链函数

 l1 = [11, 22, 33, 44]
l2 = ['jason','kevin','tony','oscar']
# 需求:将两个列表中的元素一一对应成对即可

res = zip(l1,l2)  # 结果是一个迭代器
 print(res)  # 目前想看里面的数据 用list转换一下即可
 print(list(res))  # [(11, 'jason'), (22, 'kevin'), (33, 'tony'), (44, 'oscar')]



'''zip可以整合多个数据集 如果数据集之间个数不一致 那么依据短的,并且zip可以整合多个数据集'''
 l1 = [11, 22, 33, 44, 55]
 l2 = ['jason', 'kevin']
 res = zip(l1,l2)
 print(list(res))         #[(11, 'jason'), (22, 'kevin')]

(3)filter过滤函数

l1 = [11, 22, 33, 44, 55, 66]
'''需求:筛选出大于30的元素'''
def index(x):
     return x > 30
 res = filter(index,l1)
 print(list(res))  # [33, 44, 55, 66]


 res = filter(lambda x:x>30, l1)  #可以配合匿名函数使用
 print(list(res))

(4)reduce归总函数

'''以前是内置函数 现在是某个模块下面的子函数(后面讲)'''
from functools import reduce(调用时候需要用这个)

l1 = [11, 22, 33]
'''需求:将列表中所有的元素相加'''
 def index(x,y):
     return x + y
 res = reduce(index,l1)
 print(res)  # 66

res = reduce(lambda x, y: x + y, l1)  #可以用匿名函数 ,顺序是和上面一样,11和22加,后面得到结果再33和33加
print(res)  # 66

res = reduce(lambda x, y: x + y, l1, 100)  #最后一个也可以加个值,表示起始数字,顺序就是100和11先相加,一直往后
print(res)  # 166
"""掌握到能够语言表达出大致意思即可"""

 常见内置函数(未学习)

# 比较多 做好练习准备 不要求全部记忆 混个眼熟即可
# Author:Jason
# 1.abs() 获取绝对值(不考虑正负号)
# print(abs(-123))
# print(abs(123))

# 2.all()与any()
# l1 = [0, 0, 1, 0, True]
# print(all(l1)) # False 数据集中必须所有的元素对应的布尔值为True返回的结果才是True
# print(any(l1)) # True 数据集中只要所有的元素对应的布尔值有一个为True 返回的结果就是True

# 3.bin() oct() hex() 产生对应的进制数
# print(bin(100))
# print(oct(100))
# print(hex(100))

# 4.bytes() 类型转换
# s = '你好啊 hello world!'
# print(s.encode('utf8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8a hello world!'
# print(bytes(s, 'utf8')) # b'\xe4\xbd\xa0\xe5\xa5\xbd\xe5\x95\x8a hello world!'
'''针对编码解码 可以使用关键字encode与decode 也可以使用bytes和str'''
# s1 = '天黑了 抓紧进屋吧!!!'
# 编码
# res = bytes(s1, 'utf8')
# print(res)
# 解码
# res1 = str(res, 'utf8')
# print(res1)

# 5.callable() 判断当前对象是否可以加括号调用
# name = 'jason'
# def index():pass
# print(callable(name)) # False 变量名不能加括号调用
# print(callable(index)) # True 函数名可以加括号调用

# 6.chr()、ord() 字符与数字的对应转换
# print(chr(65)) # A 根据数字转字符 依据ASCII码
# print(ord('A')) # 65 根据字符转数字 依据ASCII码

# 7.dir() 返回数据类型可以调用的内置方法(查看对象内部可调用的属性)
# print(dir(123))
# print(dir('jason'))

# 8.divmod()
"""
可以使用在网站的分页制作上

总共250条数据 每页展示25条 需要多少页 10页
总共251条数据 每页展示25条 需要多少页 11页
总共249条数据 每页展示25条 需要多少页 10页
"""
# print(divmod(250,25)) # (10, 0) 第一个参数是整数部分 第二个是余数部分
# print(divmod(251,25)) # (10, 1)
# print(divmod(249,25)) # (9, 24)
# def get_page_num(total_num,page_num): # 后面django分页器使用
# more,others = divmod(total_num, page_num)
# if others:
# more += 1
# print('需要%s页'%more)
# get_page_num(1000,30)


# 9.enumerate() 枚举
# name_list = ['jason', 'kevin', 'oscar', 'tony']
# for name in name_list:
# print(name)

# for i,j in enumerate(name_list):
# print(i,j) # i类似于是计数 默认从0开始

# for i,j in enumerate(name_list,start=1):
# print(i,j) # 还可以控制起始位置

# 10.eval() exec() 识别字符串中的python代码 使用频率很低
# print('print("有点饿了")')
# eval('print("有点饿了111")')
# exec('print("有点饿了222")')
res = """
for i in range(10):
print(i)
"""
# eval(res) 只能识别简单逻辑的python代码
# exec(res) 能够识别具有与一定逻辑的python代码
# ps:课外扩展 可以百度搜一搜两者的实际应用

标签:内置,15,name,res,生成式,list,l1,print,jason
From: https://www.cnblogs.com/Milk1/p/17576758.html

相关文章

  • 《安富莱嵌入式周报》第318期:无线电扫描仪,高精度功耗分析仪,单片机JavaScript引擎,平头
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 【实战技能视频】基于硬件垂直消隐的多缓冲技术在LVGL,emWin,GUIX和TouchGFX应用https://www.armbbs.cn/forum.php?mod=viewthread&tid=120114视频版:https://www.bilibili.......
  • 【题解】Educational Codeforces Round 150(CF1841)
    赛时过了A-E,然后就开摆了,为什么感觉C那么无厘头[发怒][发怒]排名:25thA.GamewithBoard题目描述:Alice和Bob玩游戏,他们有一块黑板。最初,有\(n\)个整数\(1\)。Alice和Bob轮流操作,Alice先手。轮到时,玩家必须在棋盘上选择几个(至少两个)相等的整数,擦除它们,然后写一个......
  • NC15707 可达性
    NC15707可达性时间限制:\(C/C++\)\(1\)秒,其他语言\(2\)秒空间限制:\(C/C++\)\(262144K\),其他语言\(524288K\)\(64bit\)\(IO\)\(Format:\%lld\)题目描述给出一个\(0≤N≤10^5\)点数、\(0≤M≤10^5\)边数的有向图,输出一个尽可能小的点集,使得从这些点出发能够......
  • (数据科学学习手札153)基于martin的高性能矢量切片地图服务构建
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,在日常研发地图类应用的场景中,为了在地图上快速加载大量的矢量要素,且方便快捷的在前端处理矢量的样式,且矢量数据可以携带对应的若干属性字段,目前主流的做法......
  • [ARC150F] Constant Sum Subsequence
    ProblemStatementWehaveasequenceofpositiveintegersoflength$N^2$,$A=(A_1,\A_2,\\dots,\A_{N^2})$,andapositiveinteger$S$.Forthissequenceofpositiveintegers,$A_i=A_{i+N}$holdsforpositiveintegers$i\(1\leqi\leqN^2-N)$,an......
  • 记一次 MDK 开发 STM32WB15 时遇到的玄学BUG
    使用STM32WB15CCU6开发BLE应用调试自建的工程时,莫名报错Jlink和ST-LINK/V2都是一样的结果于是开始测试例程,开始也是正常,但是找不到自建工程的问题,开始对比代码,逐步替换然而并没有效果......
  • 15. 三数之和
    给你一个整数数组 nums ,判断是否存在三元组 [nums[i],nums[j],nums[k]] 满足 i!=j、i!=k 且 j!=k ,同时还满足 nums[i]+nums[j]+nums[k]==0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入:nums=[-1,0,1,2,......
  • 题解 P1150 【Peter的烟】
    postedon2020-11-1410:00:20|under题解|source2023编者注:本篇题解的方法过于暴力,但是尊重历史。请不要太在意。—-教你们用栈做这道题原题传送门看到这题,第一反应是用stack做。我们可以把Peter手上的烟看作一个栈,一根烟就是一个元素,抽了\(n\)支烟就从栈里pop几个,......
  • 题解 CF1501A 【Alexey and Train】
    postedon2021-03-1321:57:02|under题解|source简单模拟题,考验选手的读题能力和使用谷歌翻译的能力。先定义一个\(now=0\),我们最后算出来的结果为\(now\)。对于每个站(不包括第\(n\)站),我们需要加上\(3\)个部分:额外时间,now+=ex[i];第\(i-1\)站到第\(i\)站的时......
  • 题解 CF1501B 【Napoleon Cake】
    postedon2021-03-1617:42:06|under题解|source题目可以转化一下:给一个长为\(n\)的数组\(a\),请求出一个长为\(n\)的数组\(b\)。要求若\(a_i\)不为\(0\),则\([b_{i-a_i+1},b_i]\)这个区间要为\(1\)。知道这个题目意思就好办了。题目说\(n\leq2\times10^5\),......