這是一個編程練習,而不是一個現實世界的問題:我在尋找一個類似於append
行爲的生成器表達式。類似於追加行爲的生成器表達式
考慮:
def combine(sequence, obj):
for item in sequence:
yield item
yield obj
s = ''.join(combine(sequence, obj))
該發電機基本上類似於append
。在我的程序的工作流程上面是一樣快,
sequence.append(obj)
s = ''.join(sequence)
我現在想知道是否有一個整潔的發電機表達genexpr
與
s = ''.join(genexpr)
類似於上述append
行爲,而性能警告。
s = ''.join(_ for a in [sequence, [obj]] for _ in a)
表現不好。
感謝。在我的代碼的上下文中,這兩個變體都與'sequence.append(obj); s =''.join(sequence)'。 –
@ Jan-PhilipGehrcke'append'可能會導致列表擴展名(有時在剩餘可用空間添加新元素時,它會在幕後擴展)。雖然'chain'只創建遍歷現有元素的迭代器,所以不會有任何內存重新分配。 – ovgolovin
@ Jan-PhilipGehrcke這就是我的意思:「將項目追加到列表所需的時間是」攤銷常量「;每當列表需要分配更多內存時,它會爲實際需要的多個項目分配空間,以避免在每次調用時重新分配(這假定內存分配器速度很快;對於大型列表,分配開銷可能會將行爲推向O(n * n))。「 (來自[這裏](http://effbot.org/zone/python-list.htm)) – ovgolovin