这类似于其他一些问题( Explicitly select items from a Python list or tuple , Grabbing specific indices of a list in Python ),但我希望做相反的事情:
指定索引列表/元组以排除而不是选择的干净方法是什么?我正在考虑类似于 R 或 MATLAB 的东西,您可以在其中指定要排除的索引,例如:
vector1 <- c('a', 'b', 'c', 'd')
vector2 <- vector1[-1] # ['b', 'c', 'd']
vector3 <- vector1[c(-1, -2)] # ['c', 'd']
有没有一种好的方法可以在 Python 中完成同样的事情?如果这是一个骗局,我深表歉意,我不确定要搜索什么。
最佳答案
>>> to_exclude = {1, 2}
>>> vector = ['a', 'b', 'c', 'd']
>>> vector2 = [element for i, element in enumerate(vector) if i not in to_exclude]
这里的技巧是:
- 使用列表理解将一个列表转换为另一个列表。 (您也可以使用
filter
函数,尤其是当您要过滤的谓词已经作为一个名字不错的函数存在时。) - 使用
enumerate
将每个元素及其索引放在一起。 - 对任何
Set
使用in
运算符或Sequence
* 类型来决定过滤哪些。 (如果有很多值,set
是最有效的,并且可能在概念上是正确的答案......但它对少数几个真的无关紧要;如果你已经有了一个列表或包含 4 个索引的元组,这也是一个“Set
或Sequence
”,因此您可以直接使用它。)
* 从技术上讲,任何 Container
会做。但是大多数不是 Set
或 Sequence
的 Container
在这里都是愚蠢的。
关于python - 使用要排除的索引列表进行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18450835/