Python负索引

Python负索引,python,Python,我知道Python中的负索引选择从列表后面开始的元素,但是是否有某种方法可以指定Python列表中我不想要的元素 没有一个好方法可以做到这一点。通常情况下,我会使用一个具有理解力的集合: [item for i, item in enumerate(lst) if i not in {2, 3}] 在这种情况下使用集非常重要(特别是当您想要忽略的索引数量增加时),因为它有O(1)个成员测试。您经常会看到在这种情况下使用列表或元组,其中成员资格测试平均为O(N) 注意:如果您不在python3

我知道Python中的负索引选择从列表后面开始的元素,但是是否有某种方法可以指定Python列表中我不想要的元素


没有一个好方法可以做到这一点。通常情况下,我会使用一个具有理解力的集合:

[item for i, item in enumerate(lst) if i not in {2, 3}]
在这种情况下使用
非常重要(特别是当您想要忽略的索引数量增加时),因为它有O(1)个成员测试。您经常会看到在这种情况下使用
列表
元组
,其中成员资格测试平均为O(N)


注意:如果您不在python3.2+上,可能需要首先定义集合,因为早期的python版本将为循环的每个迭代重新创建集合:

omit_please = {2, 3}
[item for i, item in enumerate(lst) if i not in omit_please]

没有一个好方法可以做到这一点。通常情况下,我会使用一个具有理解力的集合:

[item for i, item in enumerate(lst) if i not in {2, 3}]
在这种情况下使用
非常重要(特别是当您想要忽略的索引数量增加时),因为它有O(1)个成员测试。您经常会看到在这种情况下使用
列表
元组
,其中成员资格测试平均为O(N)


注意:如果您不在python3.2+上,可能需要首先定义集合,因为早期的python版本将为循环的每个迭代重新创建集合:

omit_please = {2, 3}
[item for i, item in enumerate(lst) if i not in omit_please]

[e代表我的列表中的e,如果e不在要排除的列表中],它可能不会对算法的缩放造成太大的影响(基本上是一个小的常量因子,在bit-O分析中被忽略)。这就是说,对于大列表,小的常量因子仍然可以对整个运行时产生很大的影响……如果使用numpy,有很多解决方案:[e for e in my_list if e not in to_exclude]如果
to_exclude
是一个
集,你将得到
O(N)
性能。@Blckknght——如果是列表或元组,你将得到O(N*M)--由于
N
(要排除的项目数)可能比
M
(项目总数)小得多,因此它可能不会对算法的缩放产生太大影响(基本上是一个小的常量因子,在位-O分析中被忽略)。也就是说,对于大列表,小的常量因子仍然可以对整个运行时产生很大的影响……如果使用numpy,有很多解决方案:如果我不在…
,这不应该是
?@AlexHall--Yep。很抱歉在这种情况下,我太忙于试图弄清楚python的窥视孔优化器何时开始将
set
转换为
frozenset
,而没有注意到这个bug。谢谢你指出。另外,如果你更喜欢这个符号,也可以使用集合减法,但它是相同的解决方案+1如果我不在…
,这不是
吗?@AlexHall--是的。很抱歉在这种情况下,我太忙于试图弄清楚python的窥视孔优化器何时开始将
set
转换为
frozenset
,而没有注意到这个bug。谢谢你指出。另外,如果你更喜欢这个符号,也可以使用集合减法,但它是相同的解决方案+1.