Pythonic方法根据索引过滤列表

时间:2014-08-13 03:17:00

标签: python performance

我想知道是否有pythonic方法在python列表上执行以下操作。 输入是:大型python列表demo = [1,3,5,...],输入索引列表索引,如[0,1][2,3,5]等。 索引类似demo = [1,3,5,6]的{​​{1}}的预期输出将为[0,1],其中索引列表中的值已过滤掉。

我能想到的方法是: 像[5,6]这样的python列表理解给出相反的[demo[i] for i in index]并转换demo和[1,3]来设置和应用集合差异。

我想知道更好的解决方案和更好的性能。

1 个答案:

答案 0 :(得分:4)

demo = [1,3,5,7,9,11,13]
index = {2,3,5}
[value for i, value in enumerate(demo) if i not in index]
# [1, 3, 9, 13]
# Note that you can use a generator expression for a large list that you don't
#   require to be in memory all at once, e.g.
# (value for i,value in enumerate(demo) if i not in index)

您也可以使用filter

map(lambda x: x[1], filter(lambda x: x[0] not in index, enumerate(demo)))
# or map(operator.itemgetter(1), filter( ... ) )

甚至设置操作,有一些工作......

correct_indexes = set(range(len(demo))) - index
[demo[i] for i in correct_indexes]