Skip to main content
 首页 » 编程设计

python之单列表迭代与多列表理解

2025年05月04日14qlqwjy

我有一个数据列表,我需要将其中的一些元素复制到几个不同的列表中。对列表进行单次迭代或执行多个列表推导会更好吗

例如

def split_data(data): 
    a = [] 
    b = [] 
    c = [] 
    for d in data: 
        if d[0]   >   1 : a.append(d) 
        if d[1]   == 'b': b.append(d) 
        if len(d) ==  3 : c.append(d) 
 
    return a, b, c 

对比

def split_data(data): 
    a = [d for d in data if d[0]   >   1 ] 
    b = [d for d in data if d[1]   == 'b'] 
    c = [d for d in data if len(d) ==  3 ] 
 
    return a, b, c 

我知道执行此操作的更 pythonic 方式是使用列表理解,但在这种情况下是这种情况吗?

请您参考如下方法:

在您的第一个示例代码中,它只需要使用多个 if 语句遍历数据一次,而后面的代码需要遍历数据 3 次。我相信列表理解将在大多数情况下通过对数据进行相同次数的迭代来赢得胜利。

对于像你的例子这样简单的操作,我更喜欢列表理解方法,当操作变得更复杂时,为了代码可读性,也许其他会更好。

对 2 函数的一些基准测试应该告诉您更多信息。 基于我对这 2 个函数的快速基准测试,使用一些虚拟数据集获取如下运行时间。这个运行时可能并不总是正确的,取决于数据集

# without list comprehension 
>>> timeit.timeit('__main__.split_data([("a","b")] * 1000000)', 'import __main__', number=1) 
0.43826036048574224 
 
# with list comprehension 
>>> timeit.timeit('__main__.split_data([("a","b")] * 1000000)', 'import __main__', number=1) 
0.31136326966964134