我试图创建一个已定义的函数(没有列表/字符串方法): 到目前为止,我有在给定位置更新的代码,但我正在努力创建可以在列表位置插入变量的代码,并移动现有元素。我希望输出是[' a'' b',' c'' d']而不是[' a',''' c',' e']。
请注意:这是为了学习,我想学习我更倾向于指向正确的方向,而不仅仅是提供答案。
def insert(list1, var, i):
counter = 0
for i in my_list:
if counter == i:
my_list[i] = var
counter += 1
return list1
list = ['a', 'b', 'd', 'e']
func = insert(list, 'c', 2)
我一夜之间一直在处理代码(抱歉我在飞机上这么晚的回复)
我已经提出了这个代码,我认为它有效,尽管它有点粗糙。谁能给出一些关于他们是否认为这是一个问题的意见?
def insert(list1, var, i):
new_list = []
counter = -1
for index in (list1[:-1]):
counter += 1
new_list.append(index)
if counter == (i-1):
new_list.append(var)
return new_list
list2= ['a', 'b', 'c', 'd', 'e', 'f', 'h']
func = insert(list2, 'g', 6)
print(func)
答案 0 :(得分:0)
def insert(list1, var, i):
new_list = list1[:i]
new_list.append(var)
new_list.extend(list1[i:])
return new_list
list = ['a', 'b', 'd', 'e']
func = insert(list, 'c', 2)
将list1的部分带到i。这称为切片 使用append将var变为new_list 使用extend
添加列表的其余部分['a', 'b', 'c', 'd', 'e']
答案 1 :(得分:0)
在我的方法中,该方法返回半分割列表,其中包含您需要在它们之间添加的元素。
In [15]: list = ['a', 'b', 'd', 'e']
In [16]: def insert(lst, var, i):
....: return lst[:i] + [var] + lst[i:]
....:
In [17]: insert(list, 'c', 2)
Out[17]: ['a', 'b', 'c', 'd', 'e']
编辑:这与@joel goldstick发布的内容基本相同
答案 2 :(得分:0)
使用切片,在不使用任何list
方法的情况下完成此操作相当容易。如果您将Python 3.5+与additional unpacking generalizations一起使用,它甚至看起来很漂亮:
def insert(list1, var, i):
# Reassign all elements at and beyond the insertion point to be the new
# value, and all but the last value previously there (so size is unchanged)
list1[i:] = var, *list1[i:-1]
或者如果调用调用者的参数是错误的,并且您想要返回一个新值:
def insert(list1, var, i):
# Unpacking the components sliced as before to a brand new list
return [*list1[:i], var, *list1[i:-1]]
如果没有解包的概括,它不是那么漂亮,但仍然可行,要么是变异的论点:
def insert(list1, var, i):
# Uglier without unpacking generalizations
list1[i], list1[i+1:] = var, list1[i:-1]
或新list
构建:
def insert(list1, var, i):
# An extra temporary without unpacking generalizations, but not ugly
return list1[:i] + [var] + list1[i:-1]
如果你可以切片或索引,这没有用,但我想指出切片赋值的功能和新的解包方法。
如果您想要仅使用range
和/或.append
且没有切片的解决方案:
def insert(list1, var, i):
for idx in range(len(list1)-1, i, -1):
list1[idx] = list1[idx-1]
list1[i] = var
或非变异:
def insert(list1, var, i):
newlist = []
for idx in range(i):
newlist.append(list1[idx])
newlist.append(var)
for idx in range(i, len(list1)-1):
newlist.append(list1[idx])
return newlist