gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:28:40 25 4
gpt4 key购买 nike

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

[(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')]

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

>>> 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:要解压的值太多

那么谁能解释为什么会发生这种情况,以及我正在尝试做的事情是否可行。

问候,博格丹

最佳答案

它不起作用,因为 [(dat[0], dat[2]) for dat in all_data] 的长度与 all_data 的长度相同>,与元组 (ids, gds) 的长度不同。

试试这个:

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

或更短:

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

如另一个答案所述,idsgds 现在将是元组,因此如果您需要列表,请这样做:

(ids, gds) = map(list, zip(*all_data)[::2])



zip(*something) 是 python 中一个相当频繁出现的习语。如果您将列表的列表视为矩阵,即

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

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

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

* 的工作方式如下:some_func(*some_list) unpacks some_list 这样函数就在以 some_list 的元素作为参数调用的效果。所以 zip(*l)zip([1, 2, 3], [4, 5, 6]) 相同。 Here's python 教程的相关部分。

zip就像一个zipper ,因此得名,所以它返回一个包含这些元素的列表:给定参数的所有第一个元素的元组,后跟所有第二个元素的元组,等等。

关于python - 为什么我不能从一个列表理解中得到两个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7105006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com