python - 按标准拆分列表

标签 python list

<分区>

假设我有一个数字列表,我想将该列表分成两个子列表:一个用于奇数,另一个用于偶数。

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

我想知道在保持相同复杂度顺序的情况下,是否有针对此问题的单行代码。

我尝试使用 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]

最佳答案

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

evens, odds = [], []
for e in numbers:
    (odds if e % 2 else evens).append(e)

当然,您可以在列表推导式中执行此操作,但是使用推导式来解决它的副作用并不是 Pythonic,因为您创建了一个可能很大的不需要的 None 值列表。您可以改为使用 itertools consume recipe如果你想走那条路。

关于python - 按标准拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370834/

相关文章:

python - 如何转置二元向量

python - 删除嵌套列表中特定字符之前的所有内容(Python)

python - 检查 NetworkX 中具有各种顶点标签的同构图的相等性

python - 按位修改 Numpy float32 并返回修改后的 np.float32 值

python 在列表列表中查找给定节点的所有邻居

python - 在 python 中初始化 2D 列表,因为我不知道确切的尺寸

python - 列表中的反向索引

python - 如何将多个列表合并为一个列表?

python - 如何使用python检查多边形内像素的颜色并删除包含白色像素的多边形?

python matplotlib更改图像的默认 Axis