【问题标题】:Dropping duplicate numbers only and only at the end of a numpy array仅删除重复数字,并且仅在 numpy 数组的末尾删除
【发布时间】:2020-06-11 06:03:58
【问题描述】:

我知道如何从 numpy 数组中删除重复项。 但是,我只需要通过保留其中一个来删除 numpy 数组末尾的重复项。 请参阅下面的示例:

输入示例如下:

105
106
106
107
108
109
109
109
109

期望的输出:

105
106
106
107
108
109

请注意,没有删除 106,我保留了最后一个副本 (109),没有重复。 有没有不使用循环的优雅解决方案? 谢谢。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    这是一种基于this post的矢量化方式-

    In [168]: a
    Out[168]: array([2, 1, 9, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 1, 0, 9, 9, 9, 9, 9])
    
    In [169]: a[:-(a[::-1]==a[-1]).argmin()+1]
    Out[169]: array([2, 1, 9, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 1, 0, 9])
    

    【讨论】:

    • 此解决方案保留元素的类型。
    【解决方案2】:

    你可以这样做:

    l = [105,
         106,
         106,
         107,
         108,
         109,
         109,
         109,
         109]
    l = [str(n) for n in l]
    l = [int(n) for n in (' '.join(l).rstrip(" "+l[-1])+" "+l[-1]).split()]
    print(l)
    

    输出:

    [105,
     106,
     106,
     107,
     108,
     109]
    

    【讨论】:

      【解决方案3】:

      你可以从 panda 中使用:pd.unique(list)

      【讨论】:

      • 这不起作用。因为这将删除数组中的所有重复项。
      猜你喜欢
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多