我有一个数据列表,我需要将其中的一些元素复制到几个不同的列表中。对列表进行单次迭代或执行多个列表推导会更好吗
例如
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
关于python - 单列表迭代与多列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44666215/