【问题标题】:Remove all instances of a specific value删除特定值的所有实例
【发布时间】:2019-09-28 05:50:44
【问题描述】:

我正在尝试从列表中删除特定值的所有实例,然后将剩余的列表项向下移动。该代码在某些情况下有效,但在其他情况下无效。例如:

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

【问题讨论】:

    标签: python python-3.x list list-comprehension


    【解决方案1】:

    解决方案

    您可以使用简单的 Pythonic 列表推导:

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 2015-04-29
      • 2012-07-26
      • 2021-06-01
      • 1970-01-01
      • 2021-12-21
      • 2015-08-24
      • 2020-09-25
      相关资源
      最近更新 更多