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

本文主要是介绍如何将几个长度相同的列表并列组合在一起(附:zip函数使用出错原因:巨坑~),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

四、一点思考

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

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

这篇关于如何将几个长度相同的列表并列组合在一起(附:zip函数使用出错原因:巨坑~)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857910

相关文章

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

使用Python绘制可爱的招财猫

《使用Python绘制可爱的招财猫》招财猫,也被称为“幸运猫”,是一种象征财富和好运的吉祥物,经常出现在亚洲文化的商店、餐厅和家庭中,今天,我将带你用Python和matplotlib库从零开始绘制一... 目录1. 为什么选择用 python 绘制?2. 绘图的基本概念3. 实现代码解析3.1 设置绘图画

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

Python3中Sanic中间件的使用

《Python3中Sanic中间件的使用》Sanic框架中的中间件是一种强大的工具,本文就来介绍Python3中Sanic中间件的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录Sanic 中间件的工作流程中间件的使用1. 全局中间件2. 路由中间件3. 异常处理中间件4. 异步中间件5. 优先级

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外