我有一个包含特定索引的列表
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]]
这些尝试都没有给我预期的结果。
请告诉我如何实现这一目标!
答案 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']