【问题标题】:Python: Find element in the list which has frequency = 2Python:在列表中查找频率= 2的元素
【发布时间】:2016-01-15 21:11:21
【问题描述】:

假设我有一个列表:

输入: ids = [123, 456, 123]

我需要找到频率为 2 的元素。

输出: 123

在 python 中执行此操作的最佳方法是什么?

【问题讨论】:

  • @njzk2 wtf?每第二个元素与 2 的频率并不完全相同......
  • 频率、周期、相同差异

标签: python


【解决方案1】:
from collections import Counter
counter = Counter(ids)
[k for k,v in counter.items() if v == 2]

【讨论】:

    【解决方案2】:

    创建一个set 并对每个项目进行计数(或创建一个Counter 或defaultdict),然后找出哪个计数为2。

    ids = [123, 456, 123]
    freq = 2
    set_ids = set(ids)
    counts = {item:ids.count(item) for item in set_ids}
    for item in counts:
        if counts[item] == freq:
            print(item)
    

     

    import collections
    ids = [123, 456, 123]
    freq = 2
    counted_ids = collections.Counter(ids)
    for item in counted_ids:
        if counted_ids[item] == freq:
            print(item)
    

     

    import collections
    ids = [123, 456, 123]
    freq = 2
    counts = collections.defaultdict(int)
    for item in ids:
        counts[item] += 1
    for item in counts:
        if counts[item] == freq:
            print(item)
    

    【讨论】:

    • @LucasCrawford - 我不是在打高尔夫球。也许如果我能以三倍的速度打字,这个答案就值得了。
    【解决方案3】:

    这也可以使用内置方法来完成,filter 以 过滤 只过滤出那些满足您要求的元素,但最好在集合上而不是在列表中执行重复相同的元素:

    >>> ids = [123, 456, 123]
    >>> s = set(ids)
    >>> filter(lambda x:ids.count(x)==2, s)
    >>> list(filter(lambda x:ids.count(x)==2, s)) #If Python3
    [123]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-07
      • 2013-11-21
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多