2017-02-14 9 views
0

у меня есть два списка одинаковой длины & хочет удалить значения из обоего, если их разности меньше 5:Если оператор в списке понимании с несколькими списками

X_List = [0, 95, 99, 107, 589] 
Y_List = [94, 98, 104, 587, 1046] 

Я хочу, чтобы удалить, например, вторые & третьи значения из каждого списка с помощью понимания:

X_list = [x if y-x <= 5 for (x,y) in zip(X_list, Y_List)] 
Y_list = [y if y-x <= 5 for (x,y) in zip(X_list, Y_List)] 

однако имеется ошибка (недействительный синтаксис) на «для» части каждой строки. Это из-за первого y & как я мог бы предотвратить это?

ответ

0

Вы положили if в неправильном месте - должно быть в конце; вот как получить списки без значений:

x_mod = [x for x, y in zip(X_List, Y_List) if abs(x-y)>5] 
Y_List = [y for x, y in zip(X_List, Y_List) if abs(x-y)>5] 

X_List = x_mod 

Первый список непосредственно не изменен, но записывается во временный вар. Если бы это было так, как в исходном источнике, то второе понимание должно было бы работать с уже измененным X_List и не дало бы желаемого результата.

Я также использовал абсолютную разницу b/n двух значений, так как вы сказали, что разница между ними должна быть больше 5, а не член Y_List должен быть больше с 5.

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

  • Нет связанных вопросов^_^