我可以在列表中同时添加两个元素吗?

2024-04-23 21:55:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要的输出:

[[(1,1)], [(2,2)], [(2,2)], [(4,4)], [(3,3)], [(6,6)]]

这是不起作用的代码:

mylist = [[[(x,x)], [(x*2,x*2)]] for x in range(1, 4)]

我知道我可以使用:

mylist = []
[mylist.extend([[(x,x)], [(x*2,x*2)]]) for x in range(1, 4)]

但是有没有办法把这写在一行里呢? 我的脚本代码有点复杂,上面的例子只是为了说明原理。因此,这毫无意义


Tags: 代码in脚本forrange例子原理extend
3条回答

您可以使用内置的itertools

>>> from itertools import chain

>>> list(chain.from_iterable([[(x, x)], [(x*2, x*2)]] for x in range(1, 4)))
[[(1, 1)], [(2, 2)], [(2, 2)], [(4, 4)], [(3, 3)], [(6, 6)]]

如果希望在不使用itertools.chain. from_iterable的情况下使用列表理解来解决此问题,则可以使用嵌套列表理解来解压为每次迭代创建的列表

这是作为[item for sublist in list for item in sublist]完成的

此处适用-

[j for x in range(1, 4) for j in ([(x,x)], [(x*2,x*2)])]
[[(1, 1)], [(2, 2)], [(2, 2)], [(4, 4)], [(3, 3)], [(6, 6)]]

这相当于在[[(x,x)], [(x*2,x*2)]]上使用解包运算符*,但由于这在列表理解中不起作用,因此这是一种很好的方法

使用嵌套列表:

mylist = [y for x in range(1, 4) for y in ([x], [x * 2])]
print(mylist)

结果:

[[1], [2], [2], [4], [3], [6]]

相关问题 更多 >