Как я могу выбрать только реальные числа из массива? (Python 3)

Я хочу найти вертикальную асимптоту для:

f = (3x ^ 3 + 17x ^ 2 + 6x + 1) / (2x^3 - x + 3)

Итак, я хочу найти корни для (2x^3 - x + 3), поэтому я написал:

 import sympy as sy
 x = sy.Symbol('x', real=True)
 asym1 = sy.solve(2*x**3-x+3,x)
 for i in range(len(asym1)):
     asym1[i] = asym1[i].evalf()
 print(asym1)


Выход был:

[0.644811950742531 + 0.864492542166306*I, 0.644811950742531 - 
0.864492542166306*I, -1.28962390148506]

Так что сейчас единственное число, которое имеет смысл в выводе - это -1,289, а комплексные числа не имеют никакого значения.

У меня вопрос: как я могу выбрать только действительные числа, так что вывод говорит:

asym1 = -1.28962390148506

2 ответа

Решение

Ты можешь сделать:

asym1 = [n for n in asym1 if n.is_real][0]    

Комплексные числа являются примерами complex класс в то время как реальные цифры floats:

asym1 = [x for x in asym1 if isinstance(x, float)]
Другие вопросы по тегам