例如,以这段代码为例,您能否解释为什么在列表中添加整数总和时使用列表推导要比使用普通的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
答案 0 :(得分:1)
在第一个功能中,还有一个额外的步骤。它首先创建一个列表,然后将其与sum
进行汇总。第二个函数只是简单地遍历它们并将其添加到总计中。
答案 1 :(得分:0)
正如jonrsharpe所建议的那样,列表理解是列表的副本。
因此stock_price()
的作用实际上是复制列表,然后对其进行迭代并计算总和。 (请注意,内置的sum
函数实际上比for
外观更有效,因为它是用C语言实现的)
另一方面,stock_price2()
不会复制列表,这样可以节省大量时间分配新列表。