在列表中查找每个元素的第一个索引

时间:2017-08-29 08:26:20

标签: python

这是一个列表a=[1,1,1,2,4,2,4,32,1,4,35,23,24,23]

我在python中这样做:

unique_number=list(set(a))
ans=map(lambda x:a.index(x),unique_number)

输出:

<map at 0x2b98b307828>

我想知道我的代码有什么问题,并找到一种更有效的方法来实现这一目标。

3 个答案:

答案 0 :(得分:2)

这段代码可以像你在Python 2中所期望的那样工作。在Python 3中,map返回一个迭代器。例如,您可以将其转换为列表:

>>> ans=map(lambda x:a.index(x),unique_number)
>>> list(ans)
[7, 0, 3, 10, 4, 11, 12]

答案 1 :(得分:1)

试试这个:

for value in map(lambda x:a.index(x),unique_number):
     print(value)

或追加:

for var in ans:
     print(var)

答案 2 :(得分:1)

您可以避免重新编制索引并首先构建集合 - 只需向后构建dict迭代a,因为字典只会保留密钥的最后一个值(在这种情况下 - 最早出现的指数),例如:

a=[1,1,1,2,4,2,4,32,1,4,35,23,24,23]

first_index = {v:len(a) - k for k,v in enumerate(reversed(a), 1)}
# {1: 0, 2: 3, 4: 4, 23: 11, 24: 12, 32: 7, 35: 10}

这样您只需扫描序列一次。