【问题标题】:Keep strings that occur N times or more保留出现 N 次或更多的字符串
【发布时间】:2015-06-15 04:24:08
【问题描述】:

我有一个列表

mylist = ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd']

我使用此列表中集合中的 Counter 来获得结果:

from collection import Counter
counts = Counter(mylist)

#Counter({'a': 3, 'c': 2, 'b': 2, 'd': 1})

现在我想对其进行子集化,以便我拥有所有出现多次的元素,例如:2 次或更多 - 输出如下所示:

['a', 'b', 'c']

这似乎应该是一项简单的任务 - 但到目前为止我还没有找到任何对我有帮助的东西。

任何人都可以建议去哪里看吗?如果我采取了错误的方法,我也不会使用 Counter。我应该注意我是 python 新手,所以如果这是微不足道的,我深表歉意。

【问题讨论】:

  • 您可以使用按功能分组。
  • 请注意 - 这是一个玩具示例。我需要一个项目出现的次数对其他数字灵活。我认为标题很清楚,但我会更具体地编辑问题。

标签: python python-2.7 counter


【解决方案1】:
[s for s, c in counts.iteritems() if c >= 2]
# => ['a', 'c', 'b']

【讨论】:

    【解决方案2】:

    试试这个...

    def get_duplicatesarrval(arrval):
        dup_array = arrval[:]
        for i in set(arrval):
            dup_array.remove(i)       
        return list(set(dup_array))   
    
    
    
    mylist = ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd']
    print get_duplicatesarrval(mylist)
    

    结果:

    [a, b, c]
    

    【讨论】:

    • 如何指定结果需要出现的次数?延伸我的例子——如果我决定只接受出现 3 次或更多次的结果怎么办?
    【解决方案3】:

    通常的方法是像@Adaman 那样使用列表推导式。
    在2以上的特殊情况下,也可以用另一个Counter减一个

    >>> counts = Counter(mylist) - Counter(set(mylist))
    >>> counts.keys()
    ['a', 'c', 'b']
    

    【讨论】:

    • 您好约翰,感谢您的评论。对不起,我的问题不够具体。我没有意识到 2 或更多是一个特例。
    • @SamPassmore,这样做真的不是特别或特别快。根据我的经验,它确实经常出现在实际程序中——计算字谜、合数的因数等。但无论如何列表理解都很好。
    【解决方案4】:
    from itertools import groupby
    
    mylist = ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd']
    
    res = [i for i,j in groupby(mylist) if len(list(j))>=2]
    
    print res
    ['a', 'b', 'c']
    

    【讨论】:

      【解决方案5】:

      我认为上面提到的答案更好,但我相信这是最简单的理解方法:

      mylist = ['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd']
      newlist=[]
      newlist.append(mylist[0])
      for i in mylist:
          if i in newlist:
              continue
          else:
              newlist.append(i)
      print newlist
      
      >>>['a', 'b', 'c', 'd']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-22
        • 2022-01-18
        • 2019-10-23
        • 2011-02-04
        • 2017-04-03
        • 2010-12-25
        • 2016-05-07
        相关资源
        最近更新 更多