Python产生多个赋值

时间:2014-02-22 22:36:16

标签: python

我通常尽可能地尝试使用yield,但是我不知道如何在这样的代码上使用yield:

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)

显然,在上面的例子中,我可以将它重写为两个不同的函数,但对于更复杂的东西,这可能在计算上非常昂贵,因为我的运行次数是我的两倍。

如何使用上述代码来使用yield?

1 个答案:

答案 0 :(得分:3)

使用partition() 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)

如果oddeven几乎不同步消耗,或者谓词不贵,那么您的列表版本(来自问题)应该更快。