1

我知道我已经看到了有关正确方法的干净示例,甚至可以发誓它在标准 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]]

但是我很确定有一个函数可以做同样的事情,但是以迭代器的方式,从而摆脱了我在左侧的直接索引访问并在for. 也许这是一种嵌入式列表理解的形式,但我真的认为有一种更清洁的方式(也许使用 imap?)。

4

2 回答 2

3

也许你在想itemgetter

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

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

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

给出你想要的输出

于 2013-04-29T00:05:34.490 回答
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)为另一个重要的调用,因此很容易阅读第一级列表元素的来源。

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

于 2013-04-29T00:38:35.973 回答