#python #python-3.x #list #matrix #nested-for-loop
#python #python-3.x #Список #матрица #вложенный для цикла
Вопрос:
Я пишу функцию, чтобы определить, являются ли элементы матрицы сложными. Я ожидаю, что функция вернет либо a True
, либо a False
. У меня есть этот код, но, похоже, он работает не так, как ожидалось:
def confirm_matrix(M):
row_1_length = len(M[0])
if len(M)>0:
for row in M:
if type(row) is not list or tuple:
return False
for row in M[1:]:
if len(row)!= row_1_length:
return False
for row in M:
for element in row:
try:
isinstance(element, complex) == True
return True
except:
return False
confirm_matrix([[1j,1j],[2j,2j]])
Я ожидаю получить True
, но это дает False
. Что я могу улучшить в своем коде здесь?
Комментарии:
1. Рассмотрите возможность использования
numpy.iscomplex()
для ускорения
Ответ №1:
Логика здесь излишняя. Если ваша матрица всегда 2d, вы можете перебирать строки и столбцы и передавать генератор в any
:
>>> M = [[1j,1j],[2j,2j]]
>>> any(isinstance(x, complex) for row in M for x in row)
True
>>> M = [[1,1],[2,2]]
>>> any(isinstance(x, complex) for row in M for x in row)
False
Если вы используете numpy, np.iscomplex()
это правильный путь:
>>> a = np.array([[1 1j, 1 0j], [4.5, 3]])
>>> np.iscomplex(a).any()
True
Комментарии:
1. Верный путь! Спасибо