这是一个列表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>
我想知道我的代码有什么问题,并找到一种更有效的方法来实现这一目标。
答案 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}
这样您只需扫描序列一次。