2017-01-20 1 views
0

Предположим, что у меня есть список коэффициентов полинома в порядке убывания экспонентов (если len(list) == x, то показатели будут варьироваться от целых чисел x-1 до 0). Я хочу удалить «маленькие» элементы указанного списка, что означает abs(element) > 0 and abs(element) < .000001, но сохраните показатели многочлена, которые не являются «маленькими».Булевы выражения для элементов в списках

Как я могу это сделать в Python 3.0?

Вот пример того, что я хочу в контексте:

my_list = [3.000000000000000e-12, 4.99999999999948, 4.00000000000002, -0.000042535500000e-15, -0.200000000000000] exponents = [4,3,2,1,0] #As stated previously' ``>>> newlist = [4.99999999999948, 4.00000000000002, -0.200000000000000] ``>>> nexexp = [3,2,0]

Следовательно, многочлен бы в виде +4,999999999999948 * х^3 + +4,000000000000002 * х^2 -0,200000000000000

Любые предложения были бы очень полезными!

ответ

9

Вместо того, чтобы удалить мелкие элементы, держать крупные из них:

newlist,newexp = zip(*[(x,e) for x,e in zip(my_list,exponents) if abs(x) > 1e-6]) 

Вы можете использовать фильтр тоже:

newlist,newexp = zip(*filter(lambda x: abs(x[0]) > 1e-6, zip(my_list,exponents)))) 
+0

гениальное решение! Есть одна вещь, которую я оставил в своем коде: каждый из экспонентов в исходном списке действительно является коэффициентами полинома в порядке убывания показателей. Мне также нужно найти способ включить только показатели коэффициентов, которые не являются «маленькими». Любой способ сделать это? В приведенном выше примере желаемый список показателей будет [3, 2, 0]. Благодаря! –

+0

Чтобы получить еще один ответ, вы должны задать другой вопрос или хотя бы изменить исходный вопрос. – DyZ

+0

только готовый модифицирующий мой вопрос. Теперь это должно быть исправлено. –

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