我知道我已经看到了正确的方法来做这个干净的例子,甚至可能发誓它是在一个标准的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可能吗?)。
答案 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)
,因此很容易阅读第一级列表元素的来源。
我仍然不确定从哪里得到这个,但它绝对不是我最初的想法之一。