迭代列表列表,不返回子列表中的所有项目

时间:2013-04-29 00:01:55

标签: python iterator

我知道我已经看到了正确的方法来做这个干净的例子,甚至可能发誓它是在一个标准的python库中。我现在似乎无法找到它。能不能指出我正确的方向。

迭代器,列出只返回子列表中任意值的列表。我们的想法是在列表理解中使用它。

alist = [    [1,2,3,4,5],
             [2,4,6,8,10],
             [3,6,9,12,15]    ]

only_some_values = [list(x[2]]) for x in alist]

[[3],[6],[9]]

但是我确信有一个函数可以做同样的事情,但是以迭代器的方式,因此摆脱了我在左侧的直接索引访问并在{{1}的右侧链接了一个额外的迭代器}。也许这是嵌入式列表理解的一种形式,但我真的认为有一种更清晰的方式(使用imap可能吗?)。

2 个答案:

答案 0 :(得分:3)

也许你在考虑itemgetter

>>> from operator import itemgetter
>>> map(itemgetter(2), alist)
[3, 6, 9]

但这不会将元素留在子列表中

only_some_values = [[x[2]] for x in alist]

提供您想要的输出

答案 1 :(得分:0)

以下是我的想法:

from operator import itemgetter

alist = [    [1,2,3,4,5],
             [2,4,6,8,10],
             [3,6,9,12,15]    ]

[list(x) for x in zip(map(itemgetter(2),alist),
                      map(itemgetter(0),alist))    ]

[[3,1], [6,2], [9,3]]

这个想法是你保持理解的左侧清晰,可能用另一个重要的调用替换list(x),因此很容易阅读第一级列表元素的来源。

我仍然不确定从哪里得到这个,但它绝对不是我最初的想法之一。