2014-08-13 3 views
0

Мне интересно, существует ли pythonic способ выполнить следующую операцию в списке python. Вход является: Большой список Python demo = [1,3,5,...], входной индекс списка индексов, как [0,1][2,3,5] или т.п. Предполагаемый выход для demo = [1,3,5,6] с индексом как [0,1] будет [5,6] со значениями в списке индексов отфильтрованы.Pythonic способ фильтровать список на основе индекса

метод я могу думать: питона список понимание как [demo[i] for i in index] дает противоположный [1,3] и конвертировать демо и [1,3] установить и применить множество различий.

Мне интересно, лучшее решение с лучшей производительностью.

ответ

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] 
+0

Наборы неупорядоченные, так, например, набор операций вы, вероятно, хотите использовать отсортированные (correct_indexes), которые будут препятствовать эффективности. – Zart

+0

@ Zart true! благодаря –

Смежные вопросы