0

如何将元素插入到程序指定级别的列表中?我的解决方案不是 Pythonic:

def listInsertDepth(l,e,i,lvl): # Insert element e into list l at depth lvl using list of indices i
    if lvl < 0: # That is, if your depth level is invalid
        return l
    else:
        assert len(i) == lvl+1 # One index for every level, plus for the actual insertion
        s = l # A copy for tampering with
        for index in range(lvl):
            s = s[i[index]]
        s.insert(i[-1],e)
        return listInsertDepth(l,s,i[:-1],lvl-1) 
4

1 回答 1

2

给定一系列索引,您可以简单地遍历它们,除了最后一个以遍历嵌套结构到要插入的父列表:

listInsertAtDepth(lst, value, indices):
    parent = lst
    for index in indices[:-1]:
        parent = parent[index]
    parent.insert(indices[-1], value)

您可以添加一个try,except组合来检测您的索引是否错误:

listInsertAtDepth(lst, value, indices):
    parent = lst
    try:
        for index in indices[:-1]:
            parent = parent[index]
        parent.insert(indices[-1], value)
     except IndexError:
        return None

但就个人而言,我宁愿得到一个例外,也不愿像那样吞下和丢弃它。

请注意,您不应lst从函数返回,因为它已就地更改。就地修改列表的Python stdlib 方法(如.append()and .extend())也不返回任何内容。

于 2013-01-15T18:08:09.847 回答