按标准拆分列表

dab*_*aba 2 python list

假设我有一个数字列表,我想将这个列表分成两个子列表:一个用于奇数,另一个用于平均.

evens, odds = [], []
for e in numbers:
    if e % 2 == 0:
        evens.append(e)
    else:
        odds.append(e)
Run Code Online (Sandbox Code Playgroud)

我想知道在保持相同的复杂程度的同时,是否存在针对此问题的单线程.

我尝试使用itertools.groupby但是列表需要先订购,所以我要实现一个O(2n)而不是O(n):

def is_even(n):
    return n % 2 == 0

lst = sorted(lst, key=is_even)
grouper = itertools.groupby(lst, key=is_even)
lst1, lst2 = [list(v) for k, v in grouper]
Run Code Online (Sandbox Code Playgroud)

Chr*_*nds 6

如何在追加之前使用三元运算符:

evens, odds = [], []
for e in numbers:
    (odds if e % 2 else evens).append(e)
Run Code Online (Sandbox Code Playgroud)

当然你可以在列表理解中做到这一点,但是对于它的副作用使用理解不是Pythonic,因为你创建了一个可能很大的不需要的None值列表.如果你想采用那条路线,你可以使用itertools消费食谱.