繁体   English   中英

Python - 在不使用插入函数的情况下在特定索引处插入元素

[英]Python - insert element at specific index without using insert function

只是抬头。 我的代码可能已经过时了。 我是新手,我正在尽最大努力弄清楚,但我正在挣扎

到目前为止,我有这个:

def insert_value(my_list, value, insert_position):

    new_list = []
    for i in range(len(my_list)):
        if i == insert_position:
            new_list.append(value)
            i += 1

            return new_list

这是调用我的函数的代码:

str_list3 = ['one','three','four', 'five', 'six']
new_list = list_function.insert_value(str_list3, 'two', 1)
print(new_list)
str_list4 = ['i', 't']
str_list4 = list_function.insert_value(str_list4, 'p', 0)
print(str_list4)
str_list4 = list_function.insert_value(str_list4, 's', -1)
print(str_list4)
str_list4 = list_function.insert_value(str_list4, 's', 7)
print(str_list4)

和:

num_list2 = [1, 3, 4, 5, 6]
num_list2 = list_function.insert_value(num_list2, 2, 1)
print(num_list2)

我的解决方案离我很远吗? 我真的很想了解我哪里出错了

输出应为:

['one', 'two', 'three', 'four', 'five', 'six']
['p', 'i', 't']
['s', 'p', 'i', 't']
['s', 'p', 'i', 't', 's']

和:

[1, 2, 3, 4, 5, 6]]

我的输出是:

['two']
['p']
None

这就是我得到的全部

你实际上非常接近,你只需要添加一些边界检查:

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

num_list2 = [1, 3, 4, 5, 6]
num_list2 = insert_value(num_list2, 2, 1)
print(num_list2)

输出:

['one', 'two', 'three', 'four', 'five', 'six']
['p', 'i', 't']
['s', 'p', 'i', 't']
['s', 'p', 'i', 't', 's']
[1, 2, 3, 4, 5, 6]

您非常接近,只是您忽略了从原始列表中插入行并且您在循环内返回而不是在完成后返回。 此外,无需增加i 它在下一个循环中使用range的下一个值重新分配。 基本上, range取代了增量。

def insert_value(my_list, value, insert_position):
    new_list = []
    for i in range(len(my_list)):
        if i == insert_position:
            new_list.append(value)
        new_list.append(my_list[i])
    return new_list

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

您可以使用enumerate代替range计数,但也可以为您提供迭代的行,因此您不必再次索引数组。

def insert_value(my_list, value, insert_position):
    new_list = []
    for i,v in enumerate(my_list):
        if i == insert_position:
            new_list.append(value)
        new_list.append(v)
    return new_list
    
str_list3 = ['one','three','four', 'five', 'six']
new_list = insert_value(str_list3, 'two', 1)
print(new_list)

你已经对这个问题有了一些回应。 这是要考虑的另一种选择:

def insert_value(my_list, value, insert_position):
    if insert_position < 0:
        insert_position = (-insert_position) - 1

    #if you want any negative value to result in position 0
    #then your insert_position assignment will be
    #if insert_position < 0: insert_position = 0
    #the rest of the code will remain the same

    my_list.insert(insert_position,value)

    return my_list

str_list3 = ['one','three','four', 'five', 'six']
new_list = insert_value(str_list3, 'two', 1)
print(new_list)
str_list4 = ['i', 't']
str_list4 = insert_value(str_list4, 'p', 0)
print(str_list4)
str_list4 = insert_value(str_list4, 's', -1)
print(str_list4)
str_list4 = insert_value(str_list4, 's', 7)
print(str_list4)

num_list2 = [1, 3, 4, 5, 6]
num_list2 = insert_value(num_list2, 2, 1)
print(num_list2)

这些输出将是:

['one', 'two', 'three', 'four', 'five', 'six']
['p', 'i', 't']
['s', 'p', 'i', 't']
['s', 'p', 'i', 't', 's']
[1, 2, 3, 4, 5, 6]

#自定义插入函数

insert_value =lambda a,value,idx: a[:idx] + [value] + a[idx:]

例子

str_list3 = ['one','three','four', 'five', 'six']
new_list = insert_value(str_list3, 'two', 1)
print(new_list)
str_list4 = ['i', 't']
str_list4 = insert_value(str_list4, 'p', 0)
print(str_list4)
str_list4 = insert_value(str_list4, 's', -1)
print(str_list4)
str_list4 = insert_value(str_list4, 's', 7)
print(str_list4)

num_list2 = [1, 3, 4, 5, 6]
num_list2 = insert_value(num_list2, 2, 1)
print(num_list2)

这些输出将是:

['one', 'two', 'three', 'four', 'five', 'six']
['p', 'i', 't']
['s', 'p', 'i', 't']
['s', 'p', 'i', 't', 's']
[1, 2, 3, 4, 5, 6]

另一个示例,但源列表会根据需要更改,您可以复制它

语法:lst[index:index] = [obj]

这里没有自定义功能

str_list = ['one','three','four', 'five', 'six']
str_list[1:1]=['two']
print(str_list)

str_list1=['i', 't']
str_list1[0:0]='p'
print(str_list1)
str_list1[-1:-1]=['s']
print(str_list1)
str_list1[7:7]=['s']
print(str_list1)

num_list2 = [1, 3, 4, 5, 6]
num_list2[1:1]=[2]
print(num_list2)

这些输出将是:

['one', 'two', 'three', 'four', 'five', 'six']
['p', 'i', 't']
['s', 'p', 'i', 't']
['s', 'p', 'i', 't', 's']
[1, 2, 3, 4, 5, 6]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM