我通常会尽可能地使用产率,但我不知道如何在这样的代码上这样做:
numbers = [1,2,3,4,5,6,7,8,9,10]
def odd_and_even(numbers):
odd = []
even = []
for number in numbers:
if number % 2:
odd.append(number)
else:
even.append(number)
return (odd, even)显然,在上述情况下,我可以将它重写为两个不同的函数,但是对于一些更复杂的函数,这可能在计算上相当昂贵,因为我将运行两倍的检查。
如何使上面的代码使用产率?
发布于 2014-02-22 22:47:45
使用 function
import itertools
def partition(items, predicate=bool):
a, b = itertools.tee((predicate(item), item) for item in items)
return ((item for pred, item in a if not pred),
(item for pred, item in b if pred))
odd, even = partition(numbers, lambda n: n % 2 == 0)如果odd、even没有几乎同步使用,或者如果谓词不昂贵,那么列表版本(从问题中)应该会更快。
https://stackoverflow.com/questions/21961550
复制相似问题