如何在python的外部列表的最后一个嵌套列表中添加项?

时间:2011-11-28 17:00:41

标签: python

是否可以将项目添加到外部列表的最后一个嵌套列表中。 即:

a=[1,2,[3,4,[5,6]]] 插入7之后,我希望我的列表成为

a=[1,2,[3,4,[5,6,7]]]

3 个答案:

答案 0 :(得分:9)

您可以使用索引来引用最后一个内部列表:

>>> a=[1,2,[3,4,[5,6]]]
>>> a[2][2].append(7)
>>> a
[1, 2, [3, 4, [5, 6, 7]]]

或者您可以编写一个函数来查找最后一个内部列表:

>>> def findlastlist(s):
    while s and isinstance(s[-1], list):
        s = s[-1]
    return s

>>> a=[1,2,[3,4,[5,6]]]
>>> findlastlist(a).append(7)
>>> a
[1, 2, [3, 4, [5, 6, 7]]]

答案 1 :(得分:3)

如果您不寻找一般解决方案:

>>> a=[1,2,[3,4,[5,6]]]
>>> a[-1][-1].append(7)
>>> print a
[1, 2, [3, 4, [5, 6, 7]]]

如果你这样做,这是一个天真的实现(用于使用,请参阅doctests):

一个函数,它返回列表的嵌套级别:

def nesting(alist, level=0):
    """ Get the nesting level of a list.

    >>> nesting([])
    0
    >>> nesting([1, 2])
    0
    >>> nesting([1, [2]])
    1
    >>> nesting([1, 2, [3, 4, [5, 6]]])
    2
    >>> nesting([1, 2, [3, 4, [5, 6]], [33, 44, [55, 66]]])
    2
    """
    try:
        alist[-1]
    except IndexError:
        return level
    except TypeError:
        return level - 1
    else:
        return nesting(alist[-1], level=level + 1)

在某个element附加alistlevel的函数:

def append_nested(alist, element, level):
    """
    >>> x = []
    >>> append_nested(x, 'hello', nesting(x))
    ['hello']

    >>> x = [1, 2, 3]
    >>> append_nested(x, 'hello', nesting(x))
    [1, 2, 3, 'hello']

    >>> x = [1, 2, 3, [4, 5]]
    >>> append_nested(x, 'hello', nesting(x))
    [1, 2, 3, [4, 5, 'hello']]

    >>> x = [1, 2, 3, [4, 5], [7, 8]]
    >>> append_nested(x, 'hello', nesting(x))
    [1, 2, 3, [4, 5], [7, 8, 'hello']]

    >>> x = [1,2,[3,4,[5,6]]]
    >>> append_nested(x, 7, nesting(x))
    [1, 2, [3, 4, [5, 6, 7]]]

    >>> x = [1,2,[3,4,[5,6]]]
    >>> append_nested(x, 7, 0) # append to the 'root' list
    [1, 2, [3, 4, [5, 6]], 7]
    """
    z = alist
    for i in range(level):
        z = z[-1]
    z.append(element)
    return alist

要测试它们,只需运行:

if __name__ == '__main__':
    import doctest
    doctest.testmod()

答案 2 :(得分:1)

如果您需要一般解决方案,请尝试以下方法:

def last_inner_append(x, y):
    try:
        if isinstance(x[-1], list):
            last_inner_append(x[-1], y)
            return x
    except IndexError:
        pass
    x.append(y)
    return x

>>> x = [1,2,[3,4,[5,6]]]
>>> y = 7
>>> last_inner_append(x, y)
[1,2,[3,4,[5,6,7]]]

它递归地遍历嵌套列表的最后一个元素,直到它到达不是列表的东西。在这一点上,它在那里坚持你的价值。 try / except块允许它处理空列表。