文档章节

转置/解压缩功能(zip的反转)?

 技术盛宴
发布于 01/22 12:50
字数 623
阅读 156
收藏 0

我有一个2项元组的列表,我想将它们转换为2个列表,其中第一个包含每个元组中的第一个项目,第二个列表包含第二个项目。

例如:

original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# and I want to become...
result = (['a', 'b', 'c', 'd'], [1, 2, 3, 4])

是否有内置函数可以做到这一点?


#1楼

zip是它自己的逆! 如果您使用特殊*运算符。

>>> zip(*[('a', 1), ('b', 2), ('c', 3), ('d', 4)])
[('a', 'b', 'c', 'd'), (1, 2, 3, 4)]

这种方式的工作方式是使用参数调用zip

zip(('a', 1), ('b', 2), ('c', 3), ('d', 4))

...除了参数直接传递给zip (转换为元组后),所以不必担心参数的数量太大。


#2楼

我喜欢在我的程序中使用zip(*iterable) (这是你正在寻找的代码段),如下所示:

def unzip(iterable):
    return zip(*iterable)

我发现unzip更具可读性。


#3楼

你也可以这样做

result = ([ a for a,b in original ], [ b for a,b in original ])

应该更好地扩展。 特别是如果Python不擅长扩展列表推导,除非需要。

(顺便说一下,它创建了一个2元组(对)列表,而不是像zip那样的元组列表。)

如果生成器而不是实际列表都可以,那么这样做:

result = (( a for a,b in original ), ( b for a,b in original ))

在您询问每个元素之前,生成器不会遍历列表,但另一方面,它们会保留对原始列表的引用。


#4楼

这只是另一种方式,但它帮了我很多,所以我在这里写:

拥有这种数据结构:

X=[1,2,3,4]
Y=['a','b','c','d']
XY=zip(X,Y)

导致:

In: XY
Out: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]

在我看来,解压缩并回到原始版本的更加pythonic方式是:

x,y=zip(*XY)

但这会返回一个元组,所以如果你需要一个列表,你可以使用:

x,y=(list(x),list(y))

#5楼

>>> original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> tuple([list(tup) for tup in zip(*original)])
(['a', 'b', 'c', 'd'], [1, 2, 3, 4])

在问题中给出一个列表元组。

list1, list2 = [list(tup) for tup in zip(*original)]

解压缩两个列表。

本文转载自:https://stackoom.com/question/51v/转置-解压缩功能-zip的反转

粉丝 0
博文 1229
码字总数 0
作品 0
深圳
高级程序员
私信 提问
加载中

评论(0)

Python中实用却不常见的小技巧

这是一个老外总结的Python的小技巧: 文章首发于我的技术博客:你可以在上面看到更多的Python教程和python爬虫 “Talk is cheap show me the code”,这是编程人条,说半天不如几行代码更有说...

呆木木人儿
2019/03/07
59
0
Android Zip文件解压缩代码

在Android平台中如何实现Zip文件的解压缩功能呢? 因为Android内部已经集成了zlib库,对于英文和非密码的Zip文件解压缩还是比较简单的,下面给大家一个解压缩zip的 java代码,可以在Android...

冯京宝
2012/09/28
140
0
Linux-常用命令(四)压缩解压命令

压缩解压命令:gzip 命令名称:gzip 命令英文原意:GNU zip 命令所在路劲:/bin/gzip 执行权限:所有用户 功能描述:压缩文件 压缩后的文件格式: .gz 语法:gzip [文件] -----------------...

Mysoft
2016/04/11
33
0
CNNVD 关于手机程序第三方解压缩库输入验证安全漏洞情况的通报

  近日,国家信息安全漏洞库(CNNVD)收到关于手机程序第三方解压缩库输入验证安全漏洞(CNNVD-201805-440)情况的报送。成功利用该漏洞的攻击者,可以远程读取应用数据、甚至执行任意代码...

FreeBuf
2018/05/23
0
0
Linux 下zip包的压缩与解压

linux zip 命令详解 功能说明:压缩文件。 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式......

呼噜呼噜睡翻天
2012/11/28
100
0

没有更多内容

加载失败,请刷新页面

加载更多

 企业信息平台的快速搭建,框架如何选?

Web端开发框架如何选 目前,大部分的企业信息集成系统都在web端运行,而搭建框架的选择对一个企业的发展至关重要,不过其最终目的都是要符合企业发展逻辑,助力企业战略的实施。 而在框架的选...

我想造火箭
20分钟前
25
0
安装mysql 实操截图

前言: CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用MariaDB代替了,MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之...

冥焱
24分钟前
57
0
FecMall 多商户分销系统 - 价格公式计算

FecMall Fecbdc 分销价格公式计算 本章详解讲述分销平台的各个价格,以及相应的设置,本章节非常重要,贯穿分销系统的整个流程,请仔细阅读 官网: http://www.fecmall.com/ 业务逻辑设计 系...

FecShop
24分钟前
33
0
Java Web 学习笔记(7)

文件下载 package com.janeroad.servlet;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.......

JaneRoad
28分钟前
41
0
如何在JavaScript中更改span元素的文本

如果我有跨度,请说: <span id="myspan"> hereismytext </span> 如何使用JavaScript将“ hereismytext”更改为“ newtext”? #1楼 对于现代浏览器,您应该使用: document.getElementByI......

技术盛宴
30分钟前
46
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部