如何在python的中间创建一个包含另一个列表元素的列表?

时间:2011-07-10 18:41:34

标签: python list

我有三个清单。两个从函数返回。另一个列表list_c正在程序中通过一些硬编码选项和一些变量以及这些列表的内容创建。此列表是要传递给另一个程序的参数列表,因此顺序很重要。我需要list_alist_b中的每个项目都位于list_c的某个位置。 list_alist_b的长度都是可变的。

list_a = some_function()
list_b = some_other_function()
list_c = ['some', 'stuff', list_a, 'more', list_b, variables]

基本上,除了给出一个平面列表而不是嵌套列表之外,我想要类似上面的内容。

我能做到:

list_c = ['some', 'stuff']
list_c.extend(list_a)
list_c.append('more')
list_c.extend(list_b)
list_c.append(variables)

但这看起来有点笨重,我很好奇是否有更优雅的方式去做。

3 个答案:

答案 0 :(得分:4)

这个怎么样?您可以使用+

附加/连接列表

['some', 'stuff'] + some_function() + ['more'] + some_other_function() + [variables]

答案 1 :(得分:1)

最明显的方法是使用列表连接:

list_c = list_c + list_a + ['more'] + list_b + ['var1', 'var2']

对于它的价值,itertools.chain也有效。我不知道为什么答案表明它被删除了。如果作者取消删除它,我将从我的答案中删除它。

>>> list_a = ['some_function', 'results']
>>> list_b = ['some_other_function', 'results']
>>> variables = 'foo'
>>> list_c = list(itertools.chain(['some', 'stuff'], list_a, ['more'], list_b, [variables]))
>>> list_c
['some', 'stuff', 'some_function', 'results', 'more', 'some_other_function', 'results', 'foo']

又一个解决方案:

>>> lists_to_chain = [['some', 'stuff'], list_a, ['more'], list_b, [variables]]
>>> list_c = []
>>> for l in lists_to_chain:
...     list_c.extend(l)
... 
>>> list_c
['some', 'stuff', 'some_function', 'results', 'more', 'some_other_function', 'results', 'foo']

答案 2 :(得分:0)

reduce(lambda x, y: x+y,
       [['some', 'stuff'], some_function(), ['more'], some_other_function(), variables])

比硬编码['some', 'stuff'] + some_function() + ['more'] + some_other_function() + [variables]更灵活,因为您可以在合并之前在运行时定义和操作包含列表。