假设我有一个这样的列表:
Y=[1018, 1018, 1011, 1012, 1013, 1014, 1019, 1019, 1017]
将每个数字替换为最pythonic的方法是什么
- 最小的未使用整数 (>=0),如果之前没有看到该数字
- 用于替换数字的相同整数
这样列表就变成了:
Y=[0, 0, 1, 2, 3, 4, 5, 5, 6]
第一个元素是否为 0 并不重要,但两个数字列表之间必须存在唯一的最大匹配(= 赋值),即这也是一个很好的解决方案:
Y=[3, 3, 4, 0, 2, 5, 6, 6, 1]
编辑:我尝试的是使用 find 的 for 循环,我的解决方案非常丑陋,我知道有更好的方法来做,这与我做得有多糟糕无关:D
最佳答案
想到的第一个想法是将值转换为 set()
和 enumerate()
它们,将这些对存储在字典中,然后使用映射列表理解以创建新列表:
>>> Y=[1018, 1018, 1011, 1012, 1013, 1014, 1019, 1019, 1017]
>>> mapping={v:k for k,v in enumerate(set(Y))}
>>> Y1=[mapping[y] for y in Y]
>>> Y1
[5, 5, 0, 1, 2, 3, 6, 6, 4]
关于python - 用从 0 开始的唯一项目替换列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31328043/