python - 用从 0 开始的唯一项目替换列表中的项目

标签 python

假设我有一个这样的列表:

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/

相关文章:

python - numpy - 附加到数组而不制作副本

python - Sympy:在关系上使用逻辑运算符

python - threading.Timer时间精度

python - 无法通过 pip 安装 python-ldap

python - 将 Python 脚本的输出链接到 C++ 程序的输入

python - pytorch运行时错误: CUDA error: device-side assert triggered

python - 尝试在包含 np.nan 的列中查找平均值。仅获取浮点值时遇到问题

python - 两个二维列表的逐元素乘积

python - 使用 selenium/python 获取相对于视口(viewport)的元素位置

python:有频率函数吗?