返回来自另一个列表的特定索引列表的列表值

时间:2018-03-09 22:19:54

标签: python python-3.x list list-comprehension

我有一个包含特定索引的列表

list1 = [0,3,5]

和另一个清单。

list2 = ['a','b','c','d','e','f']

我想要一行代码返回list1中提到的索引的list2项。

output = ['a','d','f']

我知道 全面的循环 可以使用/不使用 lambda函数 等。

我尝试的尝试类似于下面

[x for x in list2[y] if y in list1]
[m for m in list2 for f in list1]
[for x in i: list2[x]]

这些尝试都没有给我预期的结果。

请告诉我如何实现这一目标!

3 个答案:

答案 0 :(得分:5)

只需使用list-comprehension

[list2[i] for i in list1]
#['a', 'd', 'f']

答案 1 :(得分:3)

如果您打算做这样的大量索引,我建议使用numpy,因为numpy indexing使这样的任务变得非常简单(并且快速):

>>> import numpy as np
>>> list1 = np.array([0,3,5]) 
>>> list2 = np.array(['a','b','c','d','e','f'])
>>> list2[list1]

['a' 'd' 'f']

此索引将优于列表推导,以下是时间:

In [1]: import numpy as np

In [2]: l1 = np.random.randint(10000, size=500)

In [3]: l2 = np.random.randint(10, size=10000)

In [4]: %timeit [l2[i] for i in l1]
106 µs ± 1.21 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [5]: %timeit l2[l1]
3.6 µs ± 95.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

答案 2 :(得分:2)

你可以试试这个:

list1 = [0,3,5]
list2 = ['a','b','c','d','e','f']

print(list(map(lambda x:list2[x],list1)))

输出:

['a', 'd', 'f']