将int插入到已排序的多维列表中

时间:2017-09-22 08:51:33

标签: python-3.x

我需要在排序列表中插入一个int。

这是我到目前为止所得到的:

myfun <- function(x) {
             if (x is gecode) { # contains pseudocode
                   return(x)
             } else {
                   myfun(substr(x, 2, nchar(S)))
             }
         }

这适用于所有一维列表,例如,[1,5,10]。但是,我需要它来处理包含其他列表的任何列表,例如:[1,[5,7 [8,9,10]] 18,22]。

试过这个:

def insert_in_list(x, tree, index=0):
    if not tree:
        return tree
    elif x < tree[index]:
        tree.insert(index, x)
        return tree
    else:
        return insert_in_list(x, tree, index+1)

然而,insert_in_list(4,[[2,3,6],8,10]))返回[[[[2,3,4,6]]],4,8,10]。因此,在插入第一个后,递归不会停止。帮助我

1 个答案:

答案 0 :(得分:0)

这是因为您需要告诉您的函数停止查找x&lt;找到上限时的项目 这是一个附加信号(变量done),一旦找到上限就会传播。

def insert_in_list(x, tree, done = False):
    for index, item in enumerate(tree):
        if isinstance(item, list):
            done = insert_in_list(x, item)
        elif done:
            return True
        elif x < item:
            tree.insert(index, x)
            return True

Additionnaly

  • 您不需要索引作为参数,因为您将在循环中插入,您的函数的其他实例不需要知道最后一个索引。
  • 列表是可变的,因此即使您不将其作为参数传递,它也总是相同的列表。