簡體   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