0

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

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

4 回答 4

3

您的方法或多或少是等效的;选项 2 做了更多的工作;它必须对临时变量进行额外的存储和名称查找。实际上,差异很小,您应该更关注代码的可读性而不是过早的优化。

对于您的具体示例,您最好使用列表理解:

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

列表推导式在 C 代码中构造列表,并且不必在.append()每次循环迭代时查找方法。

于 2013-03-10T17:53:00.443 回答
2

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

于 2013-03-10T17:51:44.230 回答
2

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

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

列表理解

mylist = [1,2,3,4,5,6,7,8,9,10]
result = [n*2 for n in mylist]
于 2013-03-10T17:53:36.230 回答
1
result = [foo(i) for i in mylist]

是你想要的。

于 2013-03-10T17:52:50.663 回答