【问题标题】:Get list for duplicates on an other list python获取另一个列表 python 上的重复项列表
【发布时间】:2022-06-28 22:35:28
【问题描述】:

我需要帮助才能从其他人那里获得一份清单:

输入:

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

想要的输出:

[0, 0, 1, 0, 0, 1, 2, 3]

我尝试使用 enumerate 但失败了,有什么建议吗?

编辑:每次我在列表中遇到一个新元素时,我都会将这个新元素与一个数字相关联(从 0 开始,每个新元素 +1),如果我稍后识别它,我会输入相同的数字,所以 [1 ,1] --> 0 因为是我们遇到的第一个元素和 [2,2] --> 1 等等...

【问题讨论】:

  • 你能更清楚地解释一下意图吗?输出到底应该是什么?
  • 预期输出背后的逻辑是什么?
  • 每次我在列表中遇到一个新元素时,我都会将这个新元素与一个数字相关联,如果我稍后重新识别它,我会输入相同的数字,所以 [1,1] --> 0 因为是我们遇到的第一个元素和 [2,2] --> 1 ...
  • 您可能希望使用数字不按升序排列的示例数据;如果没有“每次遇到新元素”的解释,自然的假设是您只想从每个数字中减去 1。 :)

标签: python list duplicates


【解决方案1】:

首先构建一个字典,将每个唯一元素与一个数字关联起来:

>>> x = [[1, 1], [1, 1], [2, 2], [1, 1], [1, 1], [2, 2], [3, 3], [4, 4]]
>>> d = {}
>>> for [i, _] in x:
...     if i not in d:
...         d[i] = len(d)
...

然后您可以通过在该字典中查找来轻松构建输出列表:

>>> [d[i] for [i, _] in x]
[0, 0, 1, 0, 0, 1, 2, 3]

【讨论】:

    【解决方案2】:

    这适用于您当前的示例,但它不是一个全面的解决方案。如果没有上下文,很难理解您要达到的目标,因此请谨慎使用:

    import numpy as np
    inp = [[1, 1], [1, 1], [2, 2], [1, 1], [1, 1], [2, 2], [3, 3], [4, 4]]
    out = np.array([i[0] for i in inp]) - 1
    print(out)  # result: [0 0 1 0 0 1 2 3]
    

    【讨论】:

      猜你喜欢
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2013-09-15
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多