创建修改列表列表
Creating a list of modified lists
好的,所以我有两个常量,它们是列表的列表,但一个与另一个一样,只是多了一个元素。我想做的是能够以一种相当干净的方式定义这些内容,而不必复制内容。所以,为了澄清,我有这样的东西:
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 循环中为第一个项目中的每个项目迭代第二个变量。有没有一种干净的方法可以做到这一点?任何建议将不胜感激,非常感谢!
一旦你修复了类型错误(做 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']]
好的,所以我有两个常量,它们是列表的列表,但一个与另一个一样,只是多了一个元素。我想做的是能够以一种相当干净的方式定义这些内容,而不必复制内容。所以,为了澄清,我有这样的东西:
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 循环中为第一个项目中的每个项目迭代第二个变量。有没有一种干净的方法可以做到这一点?任何建议将不胜感激,非常感谢!
一旦你修复了类型错误(做 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']]