Python 通过按索引忽略值来筛选列表
我没有找到一种简单的方法来过滤列表,通过索引排除值。例如,我有:Python 通过按索引忽略值来筛选列表,python,python-3.x,Python,Python 3.x,我没有找到一种简单的方法来过滤列表,通过索引排除值。例如,我有: varList = ['r', 2, ('c'), ['e'], 'etc.', { 'su': 'lt'}] indexList = [1, 2, 4] 我需要: expected = ['r', ['e'], {'su': 'lt'}] 解决方案之一如下所示,包括省略和提取选项: 用法: varList = ['r', 2, ('c'), ['e'], 'etc.', { 'su': 'lt'}] indexList =
varList = ['r', 2, ('c'), ['e'], 'etc.', { 'su': 'lt'}]
indexList = [1, 2, 4]
我需要:
expected = ['r', ['e'], {'su': 'lt'}]
解决方案之一如下所示,包括省略和提取选项: 用法:
varList = ['r', 2, ('c'), ['e'], 'etc.', { 'su': 'lt'}]
indexList = [1, 2, 4]
expected = ['r', ['e'], {'su': 'lt'}]
res = getFilteredListByIndexes(varList, indexList, 'omit')
print(res) # ['r', ['e'], {'su': 'lt'}]
解决方案之一如下所示,包括省略和提取选项: 用法:
varList = ['r', 2, ('c'), ['e'], 'etc.', { 'su': 'lt'}]
indexList = [1, 2, 4]
expected = ['r', ['e'], {'su': 'lt'}]
res = getFilteredListByIndexes(varList, indexList, 'omit')
print(res) # ['r', ['e'], {'su': 'lt'}]
惯用的方法是:
[x for i, x in enumerate(varList) if i not in indexList]
对于m=len(varList)
和n=len(indexList)
,它是O(m*n)
。虽然对于较短的排除列表,这是可以的,但是对于较长列表的一些显著加速,您可能想说:
indexset = set(indexList)
[x for i, x in enumerate(varList) if i not in indexset]
这是唯一的
O(m)
(加上O(n)
)来制作这个集合。惯用的方式是:
[x for i, x in enumerate(varList) if i not in indexList]
对于m=len(varList)
和n=len(indexList)
,它是O(m*n)
。虽然对于较短的排除列表,这是可以的,但是对于较长列表的一些显著加速,您可能想说:
indexset = set(indexList)
[x for i, x in enumerate(varList) if i not in indexset]
这是唯一的
O(m)
(加上O(n)
)进行设置。最简单的方法是使用列表理解:
[索引的值,如果索引不在indexList中,则枚举(varList)中的值]
最简单的方法是使用列表理解:
[索引的值,如果索引不在indexList中,则枚举(varList)中的值]
就地解决方案:
索引列表[:-1]中的i的:
德尔瓦利斯特[i]
假设索引列表是递增的
必须从头循环以保持索引为真(如果我们从删除索引1
开始,索引2中的元素将移动到索引1,然后我们将删除错误的元素)。对于更通用的解决方案,请使用排序(indexList,reverse=True)就地解决方案:
索引列表[:-1]中的i的:
德尔瓦利斯特[i]
假设索引列表是递增的
必须从头循环以保持索引为真(如果我们从删除索引
1
开始,索引2中的元素将移动到索引1,然后我们将删除错误的元素)。对于更通用的解决方案,请使用排序(indexList,reverse=True)这与建议的完全相同…是的,因为这是完成该任务最基本和最简单的方法。这与建议的完全相同…是的,因为这是完成这项任务最基本、最简单的方法。不要对参数默认值()使用可变默认值。2.对于长度为n的列表,检查列表中的成员身份为O(n);非常慢。3.map/filter/lambda等是可以的(出于规模的原因,我花了数年的时间将我遇到的每一个挑战都转换成MapReduce),但我认为它们比列表枚举和直接测试更难阅读。关于这一点,我有几个小问题:1。不要对参数默认值()使用可变默认值。2.对于长度为n的列表,检查列表中的成员身份为O(n);非常慢。3.map/filter/lambda等没问题(出于规模原因,我花了数年的时间将我遇到的每一个挑战转换成MapReduce),但我认为它们比列表枚举和直接测试可读性差得多。我对Python比较陌生,感谢您的深思熟虑的评论欢迎您;你可以考虑接受这个答案。我在Python中比较新,感谢你的深思熟虑的评论。那么你可以考虑接受这个答案。