【发布时间】:2019-11-19 05:46:04
【问题描述】:
什么是最优雅/pythonic 的实现方式:“如果列表中总值的 x% 大于 y,则返回 true”。我目前已经实现了一个功能:
def check(listItems, val):
'''A method to check all elements of a list against a given value.
Returns true if all items of list are greater than value.'''
return all(x>val for x in listItems)
但是对于我的用例来说,等待这个特定条件的代价是相当大的,而且有些无用。如果列表中约 80% 的项目大于给定值,我想继续。 我想到的一种方法是按降序对列表进行排序,创建另一个列表并将列表中 80% 的元素复制到新列表中,然后为该新列表运行函数。但是,我希望必须有一种更优雅的方式来做到这一点。有什么建议吗?
【问题讨论】:
-
如果您进行任何排名,您将立即受到
nlog(n)复杂性的打击。相反,像你正在做的那样迭代循环中的每个元素(线性时间),检查有多少大于val,然后进行 80% 的检查。
标签: python loops for-in-loop