令牌的Tokenise列表在python中

时间:2016-02-19 22:02:21

标签: python list collapse

很抱歉这个noob问题,但我刚刚开始使用Python。

我有一个很长的195个不同整数的列表,但是它们的范围是0到2399.例如,数字90出现在mange时间,而数字7根本没有出现。

list = [90, 110, 113, 88, 90, 110, 90, 1370, 90]

我想'标记'这个,或者把它变成一个从0到195的整数列表,同时保持不同值的唯一ID。 基本上,我想要这个输出:

new_list = [1, 2, 3, 4, 1, 2, 1, 5, 1]

目标是能够有效地迭代列表。

2 个答案:

答案 0 :(得分:4)

d={}
new_list = [d[i] for i in values if d.setdefault(i,len(d)+1)]

答案 1 :(得分:0)

作为@ cricket_007,我质疑你的申请。迭代不随数字的大小而变化。但是,如果您有理由需要一组密集的ID,那么这是一种可能的解决方案。我离开了建筑物循环很简单,让你看看它是如何工作的;您可以进行一些Pythonic改进,例如使用字典 get 方法。

构建字典以将旧ID转换为新ID。 然后一举做翻译。

my_list = [90, 110, 113, 88, 90, 110, 90, 1370, 90]

new_id_dict = {}
new_id = 0

for id in my_list:
    if id not in new_id_dict:
        new_id += 1
        new_id_dict[id] = new_id

new_list = [new_id_dict[id] for id in my_list]
print new_list

输出:

[1, 2, 3, 4, 1, 2, 1, 5, 1]