我正在尝试创建一个函数,在调用时,获取列表,值和插入位置,并返回列表的副本,其值插入插入位置指定的位置。对于这个任务(由于请求),我无法在函数中使用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)
答案 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)