使用结果值或函数在Python中附加到列表中

时间:2013-03-10 17:49:36

标签: python optimization coding-style

从性能和编码风格的角度来看,这两种方法是否等同?

def foo(n):
    return n*2

# case 1 with ".append(function())"

mylist = [1,2,3,4,5,6,7,8,9,10]
result = list()
for l in mylist:
    result.append(foo(l))

# case 2 ".append(result)"

mylist = [1,2,3,4,5,6,7,8,9,10]
result = list()
for l in mylist:
    r = foo(l)
    result.append(r)

4 个答案:

答案 0 :(得分:3)

您的方法或多或少相同;选项2执行更多工作;它必须为临时变量做一个额外的存储和名称查找。在实践中,差异很小,您应该更专注于代码可读性而不是过早优化。

对于特定的示例,您最好使用列表解析:

result = [foo(l) for l in mylist]

list comprehension用C代码构造列表,不必每次循环迭代都查找.append()方法。

答案 1 :(得分:2)

我认为它们是相同的,但最好的选择是map(foo, mylist) - 即使从性能的角度来看,因为append会导致列表调整大小需要额外的时间

答案 2 :(得分:2)

你可能会在删除临时任务时获得一些性能提升,但请记住,过早优化是邪恶的,微优化不值得付出努力

当然还有更好的方法,例如

列表理解

mylist = [1,2,3,4,5,6,7,8,9,10]
result = [n*2 for n in mylist]

答案 3 :(得分:1)

result = [foo(i) for i in mylist]

是你想要的。