创建已修改列表的列表

时间:2015-08-18 20:25:00

标签: python list-comprehension

好吧,我所拥有的是两个常量列表列表,但其中一个就像另一个带有额外元素的常量。我想要做的是能够以相当干净的方式定义这些,而不必复制内容。所以,对于侮辱我有这样的事情:

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 个答案:

答案 0 :(得分: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']]