我写的代码有什么问题?

时间:2015-03-09 05:47:44

标签: python-3.x

def insert(lst, idx, elem):
    lst = lst[:idx] + [elem] + lst[idx:]

list1 = [0, 1, 2, 3, 4, 6, 7]
insert(list1, 5, 5)

list2 = ['0', '1', '0']
insert(list2, 0, '1')

for example, list1 should be [0, 1, 2, 3, 4, 5, 6, 7]
for example, list2 should be ['1', '0', '1', '0']
Edit: for example, insert([1, 2, 3], 1, 0) should be None

我的代码出了什么问题?什么应该是正确的答案?

I have been getting:
list1 [0, 1, 2, 3, 4, 6, 7]
list2 ['0', '1', '0']

2 个答案:

答案 0 :(得分:0)

您应该返回lst

的值
def insert(lst, idx, elem):
    lst = lst[:idx] + [elem] + lst[idx:]
    return lst

list1 = [0, 1, 2, 3, 4, 6, 7]
x = insert(list1, 5, 5)

list2 = ['0', '1', '0']
y = insert(list2, 0, '1')

print(x)
print(y)

结果:

[0, 1, 2, 3, 4, 5, 6, 7]
['1', '0', '1', '0']

答案 1 :(得分:0)

嗨,我假设这个问题希望您就地修改列表。

当您使用切片时,实际上会创建新的副本,而不是就地修改列表。因此,当您尝试调用 insert()print(x) 时,您将得到 [0, 1, 2, 3, 4, 6, 7]

您可以做的是使用 [:] --> lst[:] = lst[:idx] + [elem] + lst[idx:]

创建数组的副本

您不需要返回 lst,因为测试用例实际上是在测试 lst 是否是原始数组。