python– 为什么我不能从一个列表理解中获得两个列表?

python– 为什么我不能从一个列表理解中获得两个列表?,第1张

概述所以我有一个以下形式的数组:[(1, u'first_type', u'data_gid_1'), (2, u'first_type', u'data_gid_2'), (3, u'first_type', u'data_gid_3'), (4, u'first_type', u'data_gid_4')] 现在我想将每个内部列表的第一个和最后一

所以我有一个以下形式的数组:

[(1,u'first_type',u'data_gID_1'),(2,u'data_gID_2'),(3,u'data_gID_3'),(4,u'data_gID_4')]

现在我想将每个内部列表的第一个和最后一个元素提取到单独的列表中.所以,如果我这样做:

>>> IDs = [dat[0] for dat in all_data]>>> gds = [dat[2] for dat in all_data]

这有点像我期望的那样.但是我试图将这两个合并为一个调用,例如:

 (IDs,gds) = [(dat[0],dat[2]) for dat in all_data]

然而,这失败了:
     ValueError:要解压缩的值太多

所以任何人都可以解释为什么会发生这种情况,如果我想做的话甚至是可能的.

问候,
波格丹最佳答案它不起作用,因为all_data中dat的[(dat [0],dat [2])的长度与all_data的长度相同,它与元组(IDs,gds)的长度不同.

试试这个:

(IDs,gds) = zip(*[(dat[0],dat[2]) for dat in all_data])

甚至更短:

(IDs,gds) = zip(*all_data)[::2]

如另一个答案所述,IDs和gds现在将成为元组,因此如果您需要列表,请执行以下 *** 作:

(IDs,gds) = map(List,zip(*all_data)[::2])

zip(* something)是python中经常出现的习惯用语.如果将列表列表看作矩阵,即

l = [[1,2,3],[4,5,6]]

然后zip(* l)转置该矩阵:

zip(*l) == [(1,4),5),6)]

*的工作方式如下:some_func(* some_List)解包some_List,以便使用some_List的元素作为参数调用该函数.因此zip(* l)与zip([1,6])相同. Here’s python教程的相关部分.

zip的作用类似于zipper,因此它的名称,因此它返回一个包含这些元素的列表:给定参数的所有第一个元素的元组,后跟所有第二个元素的元组,等等. 总结

以上是内存溢出为你收集整理的python – 为什么我不能从一个列表理解中获得两个列表?全部内容,希望文章能够帮你解决python – 为什么我不能从一个列表理解中获得两个列表?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存