将元素插入列表,移动预先存在的元素

时间:2016-06-07 14:32:16

标签: python list function python-3.x

我试图创建一个已定义的函数(没有列表/字符串方法): 到目前为止,我有在给定位置更新的代码,但我正在努力创建可以在列表位置插入变量的代码,并移动现有元素。我希望输出是[' 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)

3 个答案:

答案 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