2024-04-23 11:55:57 发布
网友
我有一个混合了列表和数字的嵌套列表。在
nested = [[1, 2, 3], [4, 5, 6], [7, 8], [9], 10, 11]
嵌套列表只包含数字,不会包含更多列表。在
是否可以编写一个列表理解来从“嵌套”列表中生成新列表,并生成以下输出?在
这是我的尝试(代码不起作用)
[num if isinstance(item, list) for num in item else item for item in nested]
您需要将实例测试放入循环中,以便从嵌套列表中提取元素:
[num for item in nested for num in (item if isinstance(item, list) else (item,))]
演示:
如果您首先将其表示为一组for循环,则会有所帮助;您的尝试实际上是这样做的:
for
for item in nested: _element = num if isinstance(item, list) for num in item else item result.append(_element)
这不是真正有效的Python。在
我在上面列出的理解反而是这样做的:
for item in nested: _iterable = item if isinstance(item, list) else (item,) for num in _iterable: _element = num result.append(_element)
如果列表具有任意嵌套,最好使用递归函数(referring to one of my other answers):
>>> def flat_gen(x): ... def iselement(e): ... return not(isinstance(e, collections.Iterable) and not isinstance(e, str)) ... for el in x: ... if iselement(el): ... yield el ... else: ... yield from flat_gen(el) ... >>> nested = [[1,2,3] , [4,5,6] , [7,8] , [9,] , 10 , 11 ] >>> import collections >>> list(flat_gen(nested)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
如果您只是在简单列表或元组(任何iterable容器)和非列表或元组对象(即不可编辑对象和不具有更深层嵌套的iterable容器)之间混合嵌套,则可以使用带有list的生成器表达式:
list
您需要将实例测试放入循环中,以便从嵌套列表中提取元素:
演示:
^{pr2}$如果您首先将其表示为一组
for
循环,则会有所帮助;您的尝试实际上是这样做的:这不是真正有效的Python。在
我在上面列出的理解反而是这样做的:
如果列表具有任意嵌套,最好使用递归函数(referring to one of my other answers):
如果您只是在简单列表或元组(任何iterable容器)和非列表或元组对象(即不可编辑对象和不具有更深层嵌套的iterable容器)之间混合嵌套,则可以使用带有
^{pr2}$list
的生成器表达式:相关问题 更多 >
编程相关推荐