【发布时间】:2018-04-22 04:55:13
【问题描述】:
我对以下解决方案的更多 Pythonic 和高性能方法感兴趣。
def nthFrequent(arr,n):
d = dict((x, arr.count(x)) for x in set(arr))
value = sorted(d.values(), reverse=True)
# Pick nth repeated element
nthrepeat = value[n-1]
for (key, val) in d.iteritems():
if val == nthrepeat:
return key
a=[1,2,3,4,5,6,7,92,3,2,35,9,2,43,4,9,9,9]
print nthFrequent(a,2)
上面的代码将返回 2,因为 2 在 9 之后重复了 3 次,即 4 次。
我正在寻找更优雅的 lambda 使用方式,但我尝试了以下方法,但没有得到所需的结果。
max(((item, a.count(item)) for item in set(a)), key=lambda k: k[1])[0]
上面的将获得最大重复值,即。 9.
如何获得第二个或第 n 个?
【问题讨论】:
-
你能提供一个示例输入和预期输出吗?
-
不确定你想在这里用 lambda 做什么,但如果你只是想找到一个恰好重复 N 次的元素,最好使用
Counter或手动计算出现次数(不调用 @ 987654324@)。您当前的解决方案是 O(N^2),但您可以在 O(N) 内解决此问题。