首页 > 其他分享 >如何将几个长度相同的列表并列组合在一起(附:zip函数使用出错原因:巨坑~)

如何将几个长度相同的列表并列组合在一起(附:zip函数使用出错原因:巨坑~)

时间:2024-03-29 10:58:32浏览次数:38  
标签:Name zip 巨坑 Sex merge 出错 列表 ID

       Python中列表对象使用很方便,用Python编程时,经常会遇到将多个长度相同的列表是针对某一组特定对象的,如何能方便的把这些列表组合起来一起使用呢?ZIP()函数可以方便的解决这个问题。

一、将几个长度相同的列表并列组合

例如,设置四个列表

ID = [1, 2, 3, 4]
Name = ['小红', '小蓝', '小黑', '小白']
Sex = ['F', 'M', 'M', 'F']
Weight = [90, 110, 180, 88]

由于上述四个列表均属于迭代对象,所以我们用可以用zip()函数把四个列表组合成一个整体。

merge = zip(ID, Name, Sex, Weight)

试着打印一下

For _ID, _Name, _Sex, _Weight in merge:
	Print(_ID, _Name, _Sex, _Weight)

可以发现,通过zip合并后,各列表中的元素按顺序依次组合在一起了:

匹配的还是很完美的,但如果各列表长度不一样会怎样呢?

二、组合长度不一样的列表会怎样?

再设置一个长度为3的列表组合进去试试

cuo =[ 33,44,55]
mergex = zip(ID, Name, Sex, cuo)
for _ID, _Name, _Sex, _cuo in mergex:
	print(_ID, _Name, _Sex, _Weight)

长度不一样也能行呢,只不过整体按最短列表的长度进行截取了

三、列表打包在一起再怎么分开?

能进能退才能自如,能打包能拆分,让人用起来才放心。

把多个列表组合成一个zip对象后,怎么再恢复为原有列表呢?首先还是要用zip()函数,不过需要在打包成的对象前面加*作为参数,用前面组合起来的merge对象为例。意外发生了:[0]都不行——IndexError,很明显貌似原先组合好的merge变成空的了……

(一)为什么zip会变空?

    我:做好的zip为什么会变成空的,我只不过用了一次。

    Python:没错,就是这样,因为你使用了一次,所以就空了

    我:……,你好体贴,用完直接帮我帮我回收了

    Python:没错,我就是这么棒~,出于优化内存的考虑,在python3中,zip()函数生成的zip对象只能访问一次,操作一次后,内存就会释放!!!(python2中可以访问多次).

     我:咋感觉这叫坑呢,两个版本差别这么大,更坑……

(二)大不了再组装一个重新分,再次失败……

merge = zip(ID, Name, Sex, Weight)
for i in range(4):
  print(list(zip(*merge)[i])

有忘记不能多次使用,居然用了循环,再次失败……

鉴于zip不耐用,必须一次性将zip转换为其他对象,我们再来……

(三)组装成zip后先转换成list,成功!

merge = zip(ID, Name, Sex, Weight)
alllist = list(zip(*merge))
for i in range(4):
  print(alllist[i])

这次成功了,不过得到的是几个元组对象,因此还需要通过list函数处理一下。

(四)通过list函数把元组转换为列表

由于做好了能重复用的list——allist,终于不用重新做zip了~

for i in range(4):
  print(list(alllist[i]))

终于成功了,就这样一个小函数,费这些事~

四、一点思考

(一)一个函数在使用前,一定要系统了解下,最好能测试一下,不然容易踩坑。

(二)函数不要想当然的乱用,遇到问题,如果扛一阵解决不了,就换种方式,别非硬碰硬,查找解决办法有时是解决问题最快的方式。这个函数比较简单,进坑易出,有些大坑你掉进去,你就试吧,你不去查找原因硬爬,不排除永远待在坑里的可能……

标签:Name,zip,巨坑,Sex,merge,出错,列表,ID
From: https://blog.csdn.net/weixin_60535956/article/details/137127911

相关文章

  • 【异常】IDEA运行单元测试覆盖率统计时,出现运行 整个项目(4)时出错,配置按模块工作目录
    一、报错内容运行整个项目(4)时出错:配置按模块工作目录时将禁用‘覆盖’。只指定一个工作目录,或将测试范围更改为一个模块。二、报错说明这段文字描述了一个在运行整个项目时遇到的错误。错误信息提示说,在配置按模块工作目录时,将禁用’覆盖’。为了解决这个问题,建议......
  • nacos2.x 启动出错问题分析
    **nacos2.x启动出错问题分析**nacos2.0以上,双击startup.cmd闪退,或者cmd下执行startup启动时报错分析nacos2.x以上,默认以集群方式启动,如果你未配置相关集群参数,就会启动闪退或报错所以单机模式启动需加参数启动服务。图片nacos2.0-1.png解决:添加参数,以改变......
  • 量化交易入门(十六)Backtrader、Zipline、PyAlgoTrade对比分析
    量化交易发展这么多年,有很多优秀的前辈为我们提供了各种开源的交易回测系统,我将对常用的Backtrader、Zipline、PyAlgoTrade这三个量化交易回测平台进行详细介绍,并进行对比分析。一、Backtrader概述:Backtrader是一个Python的事件驱动型回测框架,由社区驱动开发,功能全面且灵......
  • C# 压缩文件 GZipStream
    //官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.io.compression.gzipstream?view=net-8.0/*GZipStream介绍*此类表示gzip数据格式,该格式使用行业标准算法进行无损文件压缩和解压缩。格式包括用于检测数据损坏的循环冗余检查值。gzip数据格式使用与......
  • zip()函数
    开始学python啦,第一篇章就以zip()内置函数,这个函数是看生成验证码的时候,竟然可以通过zip实现并行遍历,觉得很神奇,这个这种遍历方式,java还真没有。pythonzip是一个非常有用的内建函数,它可以实现并行遍历,也可以将两个或多个列表,转换成一个元组或者字典。具体的通过示例来看下案例......
  • Python解压当天创建的ZIP文件到指定的文件夹中
    1.首先,导入了需要使用的模块:-`zipfile`:用于处理ZIP文件的模块。-`os`:提供了与操作系统交互的功能。-`shutil`:用于高级文件操作,例如移动文件等。-`datetime`:用于处理日期和时间的模块。2.定义了一个函数`unzip_todays_files(zip_files_folder,extract_folder)`......
  • 求助!!!!Django+Celery异步执行神经网络时出错
    跪求大佬我使用了Django编写服务器,然后再配置celery用于执行异步程序。我的设想是,服务器接收机器学习训练请求,然后同步然后接收成功信息,随后异步执行机器学习训练。但是目前celery接收到任务以后不执行,图1-图4是我使用flower监控celery的窗口,图5-图6是异步代码(这里我同步执行过,没......
  • python 函数(解包、互相调用、作用域、函数的封装、内置函数:eval()、zip()、open())
    函数解包"""1、函数的注释:参数和返回值在注释里可以自动添加显示,只需手动加说明。2、函数的解包【拆包】:函数的参数要传递数据有多个值的时候,中间步骤拿到数据保存在元组或者列表或者字典里。-传递参数的时候加一个*或者**解包-一次拿到元组列表字典的......
  • 大数据013_Linux(上传rz,下载sz,tar,zip,unzip)
    目录一、上传、下载1、通过鼠标操作(1)下载(2)上传2、通过命令操作rz、sz(1)下载sz(2)上传rz二、压缩、解压1、tar命令(1)压缩(2)解压2、zip命令压缩文件3、unzip命令解压文件一、上传、下载1、通过鼠标操作(1)下载将LInux系统中的文件下载到Windows上eg:在FinalShell......
  • 得嘞,分页插件PageHelper返回记录总数total竟然出错了!
    问题描述分页返回的记录总数total和每页数量pageSize一致,数据库统计的数量大于当前返回的总记录数total,以下是相关代码问题分析sql错误导致返回信息有误?检查结果:经过数据执行日志中生成的sql,sql正常并且数据总条数也正确PageHelper使用方式错误,导致数据错误检查结果:通过与......