Khi*_*min 4 python loops for-in-loop
最优雅/ Python化的实现方式是:“如果列表中总值的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)
Run Code Online (Sandbox Code Playgroud)
但是对于我的用例来说,等待这种特殊条件是非常昂贵的,而且没有用。如果列表中〜80%的项目大于给定值,我想继续。我想到的一种方法是按降序对列表进行排序,创建另一个列表,然后将列表元素的80%复制到新列表中,然后为该新列表运行函数。但是,我希望必须有一种更优雅的方法。有什么建议么?
听起来您正在处理很长的清单,这就是为什么这样做很昂贵。如果可以,请您在条件满足后尽快退出,如果这样很好。any()可以做到这一点,但您最好避免在将整个列表传递给之前先阅读整个列表any()。一种选择是使用itertools.accumulate来保持连续的True值总计并将其传递给任何值。就像是:
from itertools import accumulate
a = [1, 2, 2, 3, 4, 2, 4, 1, 1, 1]
# true if 50% are greater than 1
goal = .5 * len(a) # at least 5 out of 10
any( x > goal for x in accumulate(n > 1 for n in a))
Run Code Online (Sandbox Code Playgroud)
accumulate无需阅读整个列表-它将开始传递到目前为止所看到的True值的数量。any一旦找到一个真值,它就应该短路,在上述情况下,它是在索引5处。
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |