为什么列表推导比在for循环中使用+ =花费的时间更长?

时间:2018-06-25 16:33:14

标签: python

例如,以这段代码为例,您能否解释为什么在列表中添加整数总和时使用列表推导要比使用普通的for循环花费更长的时间?

class Store:
    def __init__(self, name):
        self.name = name
        self.items = []

    def add_items(self, name, price):
        self.items.append({'name':name, 'price': price})

    def stock_price(self):
        return sum([item['price'] for item in self.items])

    def stock_price2(self):
        total = 0
        for item in self.items:
            total += item.get('price')
        return total

store = Store("Jay")
store.add_items("nike", 100)
store.add_items('puma', 200)
print(timeit.Timer(lambda: store.stock_price()).timeit(number=1000))
print(timeit.Timer(lambda: store.stock_price2()).timeit(number=1000))

股票价格结果:0.0007737720006844029

stock_price2的结果:0.0006722800026182085

2 个答案:

答案 0 :(得分:1)

在第一个功能中,还有一个额外的步骤。它首先创建一个列表,然后将其与sum进行汇总。第二个函数只是简单地遍历它们并将其添加到总计中。

答案 1 :(得分:0)

正如jonrsharpe所建议的那样,列表理解是列表的副本。 因此stock_price()的作用实际上是复制列表,然后对其进行迭代并计算总和。 (请注意,内置的sum函数实际上比for外观更有效,因为它是用C语言实现的)

另一方面,stock_price2()不会复制列表,这样可以节省大量时间分配新列表。