我正在尝试从另一个列表中的索引获取具有特定输出的列表, 例如:
L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10,...etc), (...etc)]
multiple_index = [entry[0, 3, 4] for entry in L]
#----> I know this specific code is wrong
如果以上代码可以输出,我会很喜欢它:
[(0, 3, 4), (6, 9, 10), (...etc)]
我希望主列表中每个索引的各个子索引按照所示进行分组,如果可能的话,我想知道我可以用什么代码来正确地解决这个问题,谢谢。
编辑: 另外,我怎样才能将其格式化为干净地显示为行,我将它们输出到使用.writelines和单独输出行的文本文件中,再次感谢!
答案 0 :(得分:8)
from operator import itemgetter
multiple_index = map(itemgetter(0, 3, 4), L)
或列表理解:
multiple_index = [itemgetter(0, 3, 4)(i) for i in L]
答案 1 :(得分:3)
这是一个选项:
L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10, 11), (11, 12, 13, 14, 15, 16)]
multiple_index = [(entry[0], entry[3], entry[4]) for entry in L]
from operator import itemgetter
indices = itemgetter(0, 3, 4)
multiple_index = [indices(entry) for entry in L]
答案 2 :(得分:2)
你对此感兴趣吗?
L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10,...etc), (...etc)]
multiple_index = [(entry[0], entry[3], entry[4]) for entry in L]
#----> I know this specific code is wrong
答案 3 :(得分:2)
from operator import itemgetter
get = itemgetter(0, 3, 4)
L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10,...etc), (...etc)]
multiple_index = [get(entry) for entry in L]
更具功能性的风格:
multiple_index = map(itemgetter(0, 3, 4), L)
当然,如果您正在使用numpy,您可以执行以下操作:
import numpy as np
L = np.array([(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10, 11), (11, 12, 13, 14, 15, 16)])
multiple_index = L[:,(0, 3, 4)]
导致:
array([[ 0, 3, 4],
[ 6, 9, 10],
[11, 14, 15]])
就个人而言,我最喜欢numpy版本,但这需要你安装numpy。如果您有兴趣,请参阅以下有关numpy索引的更多内容:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
Numpy还有一些利用np.s_
,np.r_
和np.c_
进行花式切片和范围构建的简洁快捷键/技巧。
答案 4 :(得分:2)
只是为了一些多样性,这是itertools.compress
,
>>> from itertools import compress, count
>>> indices = {0,3,4}
>>> items_at = lambda indices: (1 if n in indices else 0 for n in count())
>>> [tuple(compress(e, items_at(indices))) for e in L]
[(0, 3, 4), (6, 9, 10)]
答案 5 :(得分:0)
列表元组和dictioonary查找是使用 getitem 方法实现的
myarray=[0,1,2]
print myarray[1]
#result:1
#equivalent to
print myarray.__getitem__(1)
您可以通过每个列表的 getitem 功能映射所需的索引。这将返回一个列表,其中包含每个列表的索引处的项目。修改示例代码:
L = [(0, 1, 2, 3, 4, 5), (6, 7, 8, 9, 10,...etc), (...etc)]
multiple_index = [map(entry.__getitem__,[0, 3, 4]) for entry in L]
这会产生所需的输出。
有关python魔术方法的更多信息,请参阅this:
答案 6 :(得分:0)
我将如何做到这一点:
L=[tuple(range(0,6*1)),tuple(range(6*1,6*2)),tuple(range(6*2,6*3))]
print [tuple(map(lambda i: entry[i],[0,3,4])) for entry in L]