如何删除列表python中的特定项单词?

如何删除列表python中的特定项单词?,python,Python,我想删除颜色[0,4,5],因此输出将为: color = ['Red', 'Green', 'White', 'Black', 'Pink', 'Yellow'] 我应该写什么?您可以使用列表理解以及: colors=[“红色”、“绿色”、“白色”、“黑色”、“粉色”、“黄色”] 指数=[0,4,5] 索引集=集(索引) 过滤=[i的颜色,枚举中的颜色(如果i不在索引集合中) 打印(过滤)#[“绿色”、“白色”、“黑色”] 您必须减去要删除的元素的位置,因为每次删除一个元素时,列表的长度都会

我想删除颜色[0,4,5],因此输出将为:

color = ['Red', 'Green', 'White', 'Black', 'Pink', 'Yellow']

我应该写什么?

您可以使用列表理解以及:

colors=[“红色”、“绿色”、“白色”、“黑色”、“粉色”、“黄色”]
指数=[0,4,5]
索引集=集(索引)
过滤=[i的颜色,枚举中的颜色(如果i不在索引集合中)
打印(过滤)#[“绿色”、“白色”、“黑色”]

您必须减去要删除的元素的位置,因为每次删除一个元素时,列表的长度都会减少,将其他元素赋予给定的位置

color = ['Red', 'Green', 'White', 'Black', 'Pink', 'Yellow']
inc =[0,4,5]
fil=list(set(color)-set([color[x] for x in inc ]))
print(fil)

最短的代码为您的目标。打印语句是为了显示它的工作原理

color = ['Red', 'Green', 'White', 'Black', 'Pink', 'Yellow']
color.pop(0)
color.pop(4-1)
color.pop(5-2)
print(color)
如果删除列表中的数字发生更改(例如[0,5,4]),您可以先排序:

color  = ['Red', 'Green', 'White', 'Black', 'Pink', 'Yellow']
remove = [0,4,5]

remove.reverse()

for x in remove:
                print(x)
                color.pop(x)
print(color)

注意:这与@Aplet123的答案基本相同,但有一些额外的细节

  • 简明(针对您的具体情况):
  • 更一般的:
  • 速度测试:

  • 供参考:这是否回答了您的问题?两行(5行减去设置/打印值的3行)已经很短了。我不想命名颜色。这样做的目的是,此位置[0,4,5]中的每种颜色都将始终从列表中删除,而不给它命名。虽然此代码可能会回答此问题,但提供有关如何和/或为什么解决此问题的附加上下文将提高答案的长期价值。我使用颜色列表中的标记“`[color[x]for x in inc]```将它们转换为设置二者,然后减去两个集合,然后重新转换为列表你有答案了好的,这更容易
    list(set(color)-set([color[x]代表inc中的x]))
    对不起,我在StackOverflow方面没有太多经验这是错误且缓慢的。它在这个特定示例中起作用,因为索引
    [0,4,5]
    恰好是有序且唯一的。但是如果
    要删除=[4,0,5,0]
    呢?此外,不鼓励这种就地修改(如果在函数的参数上使用,而不首先使用
    .copy()
    ),可能会产生严重的副作用)。至于速度,例如,如果列表中有1M个元素,而
    to_drop
    有10K个元素,则这比@Aplet123 correct answer花费的时间多20倍。@PierreD 1)这只是一种替代方法。2) 该解决方案仍然根据原始问题提供正确答案。3) 问题过于简单化了。4) 我决不比别人说得更好。5) 虽然我完全理解这种方法的内在问题,但我想感谢您的解释。
    color  = ['Red', 'Green', 'White', 'Black', 'Pink', 'Yellow']
    remove = [0,4,5]
    
    remove.reverse()
    
    for x in remove:
                    print(x)
                    color.pop(x)
    print(color)
    
    remove.sort(reverse=True)
    [color.pop(x) for x in remove]
    
    color = ['Red', 'Green', 'White', 'Black', 'Pink', 'Yellow']
    
    list(map(color.pop, reversed([0, 4, 5])))
    
    print(color)
    
    ['Green', 'White', 'Black']
    
    [v for i, v in enumerate(colors) if i not in {0, 4, 5}]
    
    def drop(lst, to_drop):
        drop_idx = frozenset(to_drop)
        return [v for i, v in enumerate(lst) if i not in drop_idx]
    
    colors = list(np.random.uniform(size=1_000_000))
    to_drop = list(np.random.choice(np.arange(len(colors)), replace=False, size=10_000))
    
    %timeit drop(colors, to_drop)
    # 68.4 ms ± 233 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)