我想知道是否可以通过列表推导来定义列表定义中的一系列元素。我希望能够达到这样的效果:
>> ['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']
能以某种方式完成吗? 谢谢!
答案 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']