Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过按索引忽略值来筛选列表_Python_Python 3.x - Fatal编程技术网

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中比较新,感谢你的深思熟虑的评论。那么你可以考虑接受这个答案。