将值插入具有指定位置的列表

时间:2017-05-19 06:31:39

标签: python

我正在尝试创建一个函数,在调用时,获取列表,值和插入位置,并返回列表的副本,其值插入插入位置指定的位置。对于这个任务(由于请求),我无法在函数中使用bulit(除了range(),切片表达式,列表方法(除了append())或字符串方法。任何帮助都将非常感激

def insert_value(my_list, value, insert_position):

 new_list = []
 for i in my_list:
     new_list.append(i)

 if insert_position > length(my_list):
     new_list.append(value)
     return new_list
 elif insert_position <= 0:
     new_list.append(value[0])
     return new_list

str_list3 = ['one','three','four', 'five', 'six']
new_list = list_function.insert_value(str_list3, 'two', 1)
print(new_list)

4 个答案:

答案 0 :(得分:2)

这可以使用切片表示法非常简单地完成。

您知道您的功能需要做什么。 将给定值插入给定列表中的给定位置。基本上,您需要将列表拆分为两部分。第一部分包含 之前 给定索引的所有元素。第二部分包含 给定索引之后的所有元素。一旦你拥有了这两个部分,你就可以简单地将夹心“夹在中间”。

这是视觉展示我的意思。假设索引等于1

  first part      value             second part
     |              |                    |
    [1]-------------2----------------[3][4][5]
     |                                   |
     |                                   |
     |                                   |
     + all elements *before* index 1     + all elements *after* index 1

以下是实现的样子:

>>> def insert_value(lst, value, idx):
...     # elements before idx
...     front = lst[:idx]
...     # elements after idx
...     back = lst[idx:]
...     # "sandwhiching" the value between the front and back parts
...     return front + [value] + back

示例:

>>> lst = [1, 3, 4, 5]
>>> insert_value(lst, 2, 1)
[1, 2, 3, 4, 5]
>>> 

我不确定你是否必须这样做,但实施检查以查看给定索引是否在列表范围内是微不足道的。

答案 1 :(得分:1)

更新

一个更容易理解的

def insert_value(my_list, value, insert_position):
    new_list = []
    if insert_position <= 0:
        new_list.append(value)
        for i in my_list:
            new_list.append(i)
    elif insert_position >= len(my_list):
        for i in my_list:
            new_list.append(i)
        new_list.append(value)
    else:
        new_list = [None] * (len(my_list) + 1)
        # replace : index = [i for i in range(len(new_list)) if i != insert_position]
        index = []
        for i in range(len(new_list)):
            if i != insert_position:
                index.append(i)
        # end
        new_list[insert_position] = value
        for i in index:
            # replace : new_list[i] = my_list[i if i < insert_position else i - 1]
            if i < insert_position:
                new_list[i] = my_list[i]
            else:
                new_list[i] = my_list[i - 1]
            # end
    return new_list
def insert_value(my_list, value, insert_position):
    new_list = []
    if insert_position <= 0:
        new_list.append(value)
        for i in my_list:
            new_list.append(i)
    elif insert_position >= len(my_list):
        for i in my_list:
            new_list.append(i)
        new_list.append(value)
    else:
        new_list = [None] * (len(my_list) + 1)
        index = [i for i in range(len(new_list)) if i != insert_position]
        new_list[insert_position] = value
        for i in index:
            new_list[i] = my_list[i if i < insert_position else i - 1]
    return new_list

答案 2 :(得分:0)

您可以这样做,因为您要插入单个值:

def insert_value(my_list, value, insert_position):
    new_list = []
    for i in range(0, insert_position)
        new_list.append(my_list[i])
    new_list.append(value)
    for i in range(insert_position, len(my_list)+1)
        new_list.append(my_list[i-1])

如果你可以使用拼接和追加,那么

def insert_value(my_list, value, insert_position):
    new_list = my_list[:insert_position]
    new_list.append(value)
    new_list = new_list+my_list[insert_position:]

答案 3 :(得分:0)

这样做:

def insert_value(my_list, value, insert_position):
new_list = []
for i in range(0, len(my_list)+1):
    if i < insert_position:
        new_list.append(my_list[i])
    elif insert_position == i:
        new_list.append(value)
    else:
        new_list.append(my_list[i-1])
return new_list
str_list3 = ['one','three','four', 'five', 'six']
new_list = insert_value(str_list3, 'two', 1)
print(new_list)