在python中列表中的一个嵌套元素

时间:2017-09-27 06:19:22

标签: python list flatten

对于像这样的嵌套列表

<div ui-calendar="controller.uiConfig.calendar"	id="calendar" ng-model="controller.eventSources"></div>

如何平坦化第一个元素,使其成为这个?

alist = [[[1],[2],[3]],[1,2]]

我尝试了两个扁平环,但它也使其他元素变平了

[[1],[2],[3],[1,2]]

4 个答案:

答案 0 :(得分:0)

使用:

out = alist[0] + alist[1:]
print (out)
[[1], [2], [3], [1, 2]]

答案 1 :(得分:0)

您可以通过

执行此操作
def unlist_nested(L):
    if all(type(x) == list for x in L):
        return sum(map(get_inner, L), [])
    return [L]

alist = [[[1],[2],[3]],[1,2]]

unlist_nested(alist)
>>>[[1], [2], [3], [1, 2]]

答案 2 :(得分:0)

您可以使用如下的生成器功能:

In [17]: def flatten(iterable):
             for sub in iterable:
                if isinstance(sub[0], list):
                  yield from sub
                else:
                  yield sub
   ....:                 

In [18]: list(flatten(alist))
Out[18]: [[1], [2], [3], [1, 2]]

但请注意,由于我们正在检查子列表中第一个元素的类型以决定是否展平,只有当您想要展平那些列出所有项目的子列表时,这才有效。不过,如果您希望它处理所有情况,您可能需要检查子列表中是否有任何列表(可能使用any())。

答案 3 :(得分:0)

您可以在headtail中拆分嵌套列表,并将它们相加:

>>> alist = [[[1],[2],[3]],[1,2]]
>>> head, *tail = alist
>>> head + tail
[[1], [2], [3], [1, 2]]

如果您想进一步展平名单:

>>> [x for l in (head + tail) for x in l]
[1, 2, 3, 1, 2]

如果您想要展平两个第一个列表:

>>> alist = [[[1],[2],[3]],[[4], [5], [6]], [1,2]]
>>> head1, head2, *tail = alist
>>> head1 + head2 + tail
[[1], [2], [3], [4], [5], [6], [1, 2]]