2015-08-18 117 views
2

好的,我所擁有的是兩個常量,它們是列表的列表,但其中一個與另一個元素相似。我想要做的是能夠以相當乾淨的方式定義這些內容,而不必複製內容。因此,對於clairification我有這樣的事情:創建修改列表的列表

CONSTANT_ONE = [['val1', 'val2'], ['val3','val4']] 
CONSTANT_TWO = [['val1', 'val2', 'extra_stuff'], ['val3','val4','more_extra_stuff']] 

正如你可以看到我在重複的CONSTANT_ONE值。如果我能以相當乾淨的方式做到這一點,我想避免這種情況。我已經試過:

CONSTANT_TWO = [l + extra for l in CONSTANT_ONE for extra in ['extra_stuff','more_extra_stuff']] 

這我覺得是接近,但並不完全做我想做的,因爲它會在通過第二個變量循環for循環第一的每個項目。有沒有一種乾淨的方式來做到這一點?任何意見將不勝感激,非常感謝!

+1

我聞到XY問題。你想做什麼? –

+0

這取決於你的最終目標,但也許'itertools.chain'解決你的問題? – Wolph

回答

2

你的列表理解呢,一旦你修復錯誤類型(做l + [extra]而不是l + extra),是創建每種組合,或元素的產品,從兩份名單:

>>> [l + [extra] for l in CONSTANT_ONE for extra in ['extra_stuff','more_extra_stuff']] 
[['val1', 'val2', 'extra_stuff'], 
['val1', 'val2', 'more_extra_stuff'], 
['val3', 'val4', 'extra_stuff'], 
['val3', 'val4', 'more_extra_stuff']] 

相反,使用zip將第一個列表中的元素與額外的元素結合起來:

>>> [l + [extra] for l, extra in zip(CONSTANT_ONE, ['extra_stuff','more_extra_stuff'])] 
[['val1', 'val2', 'extra_stuff'], 
['val3', 'val4', 'more_extra_stuff']]