Python使用列表推导定义列表中的元素

时间:2018-01-16 08:56:38

标签: python list list-comprehension

我想知道是否可以通过列表推导来定义列表定义中的一系列元素。我希望能够达到这样的效果:

>> ['a', 'b', 1, 2, 3, 'c']

我试过了:

result_list = ['a', 'b', [i for i in range(3)] 'c']

但这会产生['a', 'b', [1, 2, 3], 'c']

或者,如果我尝试使用元组,我会得到一个像这样的生成器对象:['a', 'b', <generator object <genexpr> at 0x0000000002C9A9E8>, 'c']

能以某种方式完成吗? 谢谢!

4 个答案:

答案 0 :(得分:6)

这就是你需要的:

result_list = ['a', 'b', *[i for i in range(3)], 'c']
print(result_list)  # ['a', 'b', 0, 1, 2, 'c']

答案 1 :(得分:5)

在Python 3的最新版本中,您可以在列表定义中使用星形解包:

result_list = ['a', 'b', *[i for i in range(3)], 'c']
print(result_list)

<强>输出

['a', 'b', 0, 1, 2, 'c']

请记住,如果在列表中混合数据类型,它可能会变得混乱。如果你想要一个异构集合,那么使用元组通常会更好。

同时请注意

[[i for i in range(u)] for u in range(3)]

有效,并将生成

[[], [0], [0, 1]]

您无法通过

获得扁平版本
[*[i for i in range(u)] for u in range(3)]

如果您坚持使用旧版本的Python,最好选择使用itertools.chain.from_iterable

import itertools

src = ['a', 'b', [i for i in range(3)], 'c']
result_list = list(itertools.chain.from_iterable(src))

答案 2 :(得分:4)

result_list = ['a', 'b'] + [i for i in range(1, 4)] + ['c']

答案 3 :(得分:4)

https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists中所述,您可以使用*字符将列表解压缩为参数。

所以你的答案是:

result_list = ['a', 'b', *[i for i in range(3)], 'c']
相关问题