Как удалить элементы из списка?

Вот код, который у меня есть:

def remove(lst: list, pos: int):
    pass

def test_remove():
    lst = ['Turkey', 
       'Stuffing',
       'Cranberry sauce',
       'Green bean casserole',
       'Sweet potato crunch',
       'Pumpkin pie']

remove(lst, 2)

assert lst == ['Turkey', 
       'Stuffing',
       'Green bean casserole',
       'Sweet potato crunch',
       'Pumpkin pie',
       None]

lst = [5, 10, 15]
remove(lst, 0)
assert lst == [10, 15, None]

lst = [5]
remove(lst, 0)
assert lst == [None]

if __name__ == "__main__":
    test_remove()

Запишите код в remove(), чтобы удалить элемент в позиции гнезда, сдвинув элементы за ним, чтобы закрыть пробел, и оставив значение None в последнем слоте.

Любые идеи о том, где я должен начать?

3 ответа

Решение

Запишите код в remove(), чтобы удалить элемент в позиции гнезда, сдвинув элементы за ним, чтобы закрыть пробел, и оставив значение None в последнем слоте.

Вы можете использовать pop метод list удалить элемент и затем добавить None к списку.

def remove(lst: list, pos: int):
    lst.pop(pos)
    lst.append(None)

Учитывая список lst, pop(i) Метод удаляет элемент в iиндекс из lst,

def remove(lst: list, pos: int):
    lst.pop(pos)

Также я заметил в вашем тесте, вы ожидаете, что при удалении элемента, что None добавляется в конец списка. Это не вариант. None не должен быть элементом в списке строк, и если вы удалите элемент из списка, этот элемент исчезнет, ​​но остальные элементы останутся прежними, и больше ничего не будет добавлено.

Если вы хотите сделать это, просто добавьте lst.append(None) до последней строчки remove() функция.

Просто используя основные понятия, мы можем использовать цикл for:

def remove(lst: list, pos: int):
   for i in range(pos, len(lst)-1):
       lst[i] = lst[i+1]
   lst[-1] = None
   return lst

и тест:

remove([1,2,3,4,5,6], 2)
#[1, 2, 4, 5, 6, None]

Обратите внимание, что более просто использовать встроенные методы как @galfisher а также @R Sahu описать.

Другие вопросы по тегам