学习之高阶编程列表推导式,字典推导式

news2024/10/9 22:15:41

def test_list_one():
“”“快速生成一个[“data0”, “data1”,]列表”“”
list1 = []
for i in range(100):
list1.append(“data{}”.format(i))
return list1

def test_list_two():
“”"
快速生成一个[“data0”, “data1”,]列表
列表推导式:[x for x in xx]
推导式的优势:
语法简洁性能更好
先执行for循环,将去出来的值,存放到x
再将x存放到[]列表中
return:
“”"
list2 = [“data{}”.format(i) for i in range(100)]
return list2

需求:使用列表推导式生成一个[0,5,10,15,20,25,30,35,40]

方式一:

def test_list_three():
list3 = []
for i in range(0, 51):
if i % 5 == 0:
list3.append(i)

return list3

方式二:

def test_list_four():
“”"
[x for x in 可迭代对象 if 过滤条件]
:return:
“”"
list4 = [i for i in range(51) if i % 5 == 0]
return list4

def test_list_five():
list5 = [“data{}”.format(i) if i % 2 == 0 else “lemon{}”.format(i) for i in range(10)]
return list5

推导式结合条件语句:

形式一:[x for x in XX if 条件]----需求:生成一个[“data1”, “data3”, “data5”,]的列表

形式二:[x1 if 条件 else x2 for x in XXX]----三元运算符:x1 if else x2 需求:生成一个[“data0”,“lemon1", “data2”,"lemon3,]的列表

三元运算符

a = 10
if a > 10:
res = True
else:
res = False

使用三元运算符表达式如下:

res = True if a > 10 else False

注意事项:

一般只用列表推导式来创建新的列表

尽量保持简洁,代码超过了两行,就要考虑使用for循环

if name == ‘main’:
print(test_list_one())
print(test_list_two())
print(test_list_three())
print(test_list_four())
print(test_list_five())

如果:列表嵌套列表就不建议使用列表推导式

字典推导式

有一个列表i,把他转换为一个元素下标为键,值为元素值的字典格式的数

{key:value for key,value in XXX}

def test_dict_one():
li = [“a”, “b”, “c”, “d”, “e”, “f”]
dict_one = dict()
for k, v in enumerate(li):
dict_one[k] = v

return dict_one

def test_dict_two():
li = [“a”, “b”, “c”, “d”, “e”, “f”]
dict_two = {k: v for k, v in enumerate(li)}
return dict_two

def test_set_one():
lb = [1, 20, 30, 1, 20]
set_one = set(lb)
return set_one

def test_set_two():
lb = [1, 20, 30, 1, 20]
set_two = {i for i in lb}
return set_two

#使用字典推倒是将下面字符串格式的数据,改成字典类型的数据

cookie_str='BIDUPSID=D0727533D7147B7:PSTM=530348042:BAIDUID=B1005C9BC2EB28;sugstore=0; cfduid=doa13458f8ac2a;BD_uPN=2314353;ispeed_1sm=2;BDORZ=B490B5EBF6F3CD402

cookie_str = ‘BIDUPSID=D0727533D7147B7;PSTM=530348042;BAIDUID=B1005C9BC2EB28;sugstore=0; cfduid=doa13458f8ac2a;BD_uPN=2314353;ispeed_1sm=2;BDORZ=B490B5EBF6F3CD402’

使用分号分割字符串得到键值对列表

kv_pairs = cookie_str.split(‘;’)

使用字典推导式将键值对转换为字典

cookies_dict = {k.strip(): v.strip() for pair in kv_pairs if pair for k, v in (pair.split(‘=’, 1),)}

print(cookies_dict)

if name == ‘main’:
print(test_dict_one())
print(test_dict_two())
print(test_set_one())
print(test_set_two())

外面是[]就是列表推导式

外面是{}有可能是字典推导式,也有可能是集合—集合是特殊的列表,集合的key与value相同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2200177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【命令操作】linux上watch命令详解 _ 统信 _ 麒麟 _ 方德

原文链接:【命令操作】linux上basename和dirname使用详解 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天给大家带来一篇关于Linux上watch命令的详解文章。watch命令是Linux系统中非常有用的一个工具,它可以定期执行指定的命令并在终端…

解决vscode cpptools-srv.exe占用内存过大,导致系统卡死问题

cpptools-srv.exe是安装了c扩展出来的进程。最新版本c扩展cpptools-srv.exe疯狂的占用内存,笔者机器64G内存 都被占满了,,,,,, 网上也试了一些其他的办法,设置里面限制内存不过不好…

一入递归深似海,算法之美无止境

最近在刷leetcode hot100,在写二叉树中最大路径和的时候,看到了一个佬对递归的理解,深受启发,感觉自己对于递归的题又行了!!! 这里给大家分享一下(建立大家先去尝试一下这道题再来看 124. 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列,序列中每…

【优选算法】--- 位运算

位运算 一、常见的位运算总结(重点!)1、关于位运算的符号2、(判断)给一个数字n,确定它的二进制表示中的第X位,是1还是0?3、(修改)如何把一个二进制的数字的第…

算法:双指针系列(一)

双指针系列 一、移动零(一)题目分析(二)代码展示二、复写零(一)题目分析(二)代码展示三、快乐数(一)题目分析(二)代码展示&#xff08…

OceanBase 4.x 部署实践:如何从单机扩展至分布式部署

OceanBase 4.x 版本支持2种部署模式:单机部署与分布式部署,同时支持从单机平滑扩展至分布式架构。这样,可以有效解决小型业务向大型业务转型时面临的扩展难题,降低了机器资源的成本。 以下将详述如何通过命令行,实现集…

Matlab数据预处理——最小二乘法消除多项式趋势项

关注公众号“电击小子程高兴的MATLAB小屋”获取专属优惠 概要: 最小二乘法是一种常用的统计方法,用于通过拟合数据来消除多项式趋势项。以下是关于如何使用最小二乘法消除多项式趋势项的步骤和概念: 概念: 多项式趋势项&#…

动态规划一>解码方法

1.题目: . - 力扣(LeetCode) 2.解析: 版本一:图解: 注意: 前导0不能解码:06, 或者两个数字字符:其中一个解码失败,整个也解码失败 /**1.创建dp表2.初始化3.填…

GIS小技巧——一文教会你安装BlenderGIS插件

Blender是一款不错的三维渲染软件,用它来做三维地形图,能够更好地把地形纹理显现出来。不过,原始的Blender是没有地图底图的,要结合三维影像制作三维地形图,需要结合其他的软件,比如ArcGIS Pro,…

基于RSSI原理的蓝牙定位程序(matlab代码,3维空间、基站数量>3即可,可自适应)

目录 商品描述 商品描述 这款基于接收信号强度指示(RSSI)原理的蓝牙定位程序,专为需要高效、可靠定位解决方案的开发者和研究人员设计。无论是在室内环境还是复杂的三维空间,该程序都能通过N个蓝牙锚点,实现对未知点的…

重学SpringBoot3-集成Redis(十)之实时统计和分析

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(十)之实时统计和分析 1. 实时统计和分析的常见场景2. 使用 Redis 数据结构进行实时统计3. 使用Redis String实现计数器…

linux线程 | 一篇文章带你理解线程的概念

前言:本篇讲述linux里面线程的相关概念。 线程在我们的教材中的定义通常是这样的——线程是进程的一个执行分支。 线程的执行粒度, 要比进程要细。 我们在读完这句话后其实并不能很好的理解什么是线程。 所以, 本节内容博主将会带友友们理解什么是线程&a…

vscode软件中可以安装的一些其他插件

一. 简介 前面了解了 在 做 C开发时 vscode软件需要安装的一些常用插件。文章如下: vscode软件在 C发中常用插件-CSDN博客 本文继续了解一些其他好用的插件。 二. vscode软件中可以安装的一些其他插件 1. 字体插件 FIRA CODE FIRA CODE 致力于提升代码的连贯…

Chromium 中chrome.history扩展接口c++实现

一、前端 chrome.history定义 使用 chrome.history API 与浏览器的已访问网页的记录进行交互。您可以在浏览器的历史记录中添加、移除和查询网址。如需使用您自己的版本替换历史记录页面,请参阅覆盖网页。 更多参考:chrome.history | API | Chrome…

LSTM 长短期记忆网络:解锁时间序列数据的深层秘密

在这个数据驱动的时代,理解和预测时间序列数据成为了许多领域的关键。从股票价格预测到天气模式分析,从自然语言处理到健康监测,时间序列数据无处不在,并且蕴含着丰富的信息。然而,传统的神经网络在处理这类数据时往往…

Openstack 安装教程

1.首先更新系统 sudo apt update sudo apt upgrade -y2.安装必要软件包 sudo apt install -y software-properties-common3.添加openstack官方仓库 sudo add-apt-repository cloud-archive:train sudo apt update4.安装openstack核心组件 sudo apt install -y python3-opens…

技术分享 —— JMeter接口与性能测试实战!

前言 在软件开发和运维过程中,接口性能测试是一项至关重要的工作。JMeter作为一款开源的Java应用,被广泛用于进行各种性能测试,包括接口性能测试。本文将详细介绍如何使用JMeter进行接口性能测试的过程和步骤。 JMeter是Apache组织开发的基…

Redis-02 持久化

redis持久化即将数据从内存写入磁盘,Redis提供了两种持久化的方式:RDB和AOF。 1.RDB RDB持久化:Redis可以将内存中的数据定期快照保存到磁盘上的一个二进制文件中。RDB持久化是一种比较紧凑的文件格式,适用于备份和灾难恢复。通过…

陈零九全新单曲《也曾想走进你的心底》 揭露爱而不得的情感遗憾

图片提供:种子音乐 “创作男神”陈零九于10月9日推出充满深情的全新创作单曲《也曾想走进你的心底》,这首歌再次延续他招牌的“九式情歌”风格,展现其创作魅力。歌曲以一段“爱而不得”的感情故事为主线,深入探讨人们在爱情中的复…

java家政预约上门系统源码,家政服务平台源码,基于SpringBoot框架,数据库使用MySQL,界面渲染采用Thymeleaf技术开发

自主知识产权的家政预约上门系统源码,java版本,支持二次开发,适合商用上项目。 在这个快节奏的现代生活中,越来越多的家庭开始寻求高效、便捷的家政服务解决方案。传统的家政服务模式已经很难满足人们日益增长的个性化与即时性需求…