【问题标题】:Find elements which exists in the most of the lists查找存在于大多数列表中的元素
【发布时间】:2013-08-11 19:01:25
【问题描述】:

输入:

[[1,2,3],[1,5,7],[1,9,3],[4,3,8]]

预期结果:

[1,3]

(如果元素存在于超过 50% 的输入列表中,则将元素添加到结果中)。

我正在寻找优雅、pythonic 的解决方案:)。对不起我的英语不好。

【问题讨论】:

  • 也许你可以展示你已经想出的不优雅/unpythonic的解决方案,以便我们帮助你改进它?
  • 另外,是否保证每个元素在每个子组中最多出现一次? IE。这是否会出现在输入中:[[1, 1, 2], [3, 4, 5]]?
  • 1) 到目前为止我还没有写任何解决方案。 2) 是的。

标签: python list python-3.x


【解决方案1】:

怎么样:

>>> from collections import Counter
>>> s = [[1,2,3],[1,5,7],[1,9,3],[4,3,8]]
>>> count = Counter(term for subseq in s for term in set(subseq))
>>> [k for k,v in count.items() if v > len(s)//2]
[1, 3]

Counter 是一个方便的工具,它可以计算事物:

>>> Counter([1,2,3,3,2])
Counter({2: 2, 3: 2, 1: 1})

[.. 哎呀,刚刚注意到您使用的是 Python 3,所以我们需要 .items()]。

【讨论】:

  • 谢谢!它看起来(和工作)很棒。我只需要将“iteritems”更改为“items”,可能是因为 python3。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多