Удалить все экземпляры определенного значения - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь удалить все экземпляры определенного значения из списка, а затем сдвинуть оставшиеся элементы списка вниз.Код работает в некоторых случаях, но не в других.Например:

print(myremove([7, 'B', 1, 8, 3, 'B'], 6, 'B')) # Gets what I want 
print(myremove(['C', 'C', 7, 'C', 4, 'C'], 6, 'C')) # Does not

Одна из вещей, которые я хочу сделать, это удалить все экземпляры элемента и затем переместить все оставшиеся элементы вниз.

   def myremove(mylist, elements, item):
        for i in range(elements):
            if mylist[i] == item:
                 mylist[i] = None
                 elements-= 1

        for i in range(elements):
            if mylist[i] is None:
                for j in range(i, elements):
                    mylist[j] = mylist[j + 1]
                    mylist[elements] = None

        return mylist

1 Ответ

0 голосов
/ 28 сентября 2019

Решение

Вы можете использовать простое понимание списка питонов:

vals = ['C', 'C', 7, 'C', 4, 'C']
droplist = [6, 'C']
[x for x in vals if (x not in droplist)]

Изменено myremove() Функция

def myremove(vals, droplist = None):
    if droplist is None:
        droplist = [None, ]
    return [x for x in vals if (x not in droplist)]

print(myremove([7, 'B', 1, 8, 3, 'B'], droplist=[8, 'B']))
print(myremove(['C', 'C', 7, 'C', 4, 'C'], droplist=[6, 'C']))

Вывод :

[7, 1, 3]
[7, 4]
...