我有三个清单。两个从函数返回。另一个列表list_c
正在程序中通过一些硬编码选项和一些变量以及这些列表的内容创建。此列表是要传递给另一个程序的参数列表,因此顺序很重要。我需要list_a
和list_b
中的每个项目都位于list_c
的某个位置。 list_a
和list_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)
但这看起来有点笨重,我很好奇是否有更优雅的方式去做。
答案 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]
更灵活,因为您可以在合并之前在运行时定义和操作包含列表。