#python
#python
Вопрос:
У меня есть задача реализовать функцию parallel_vec(lst1, lst2)
с 2 аргументами lst1
, lst2
которые представляют собой списки длины n
, представляющие два вектора.
Функция вернет True
, если векторы «параллельны» в противном False
случае.
Определение parallel vectors
: два вектора v1 = (n1, n2, n3)
и v2 = (k1, k2, k3)
являются параллельными векторами, если соотношение между всеми компонентами одинаково, которое определяется как n1 / k1 = n2 / k2 = n3 / k3
Это то, что я написал:
lst1 = [1,3,4]
lst2 = [2,6,8]
ind1 = 0
ind2 = 1
while ind2 < len(lst1):
if (lst1[ind1]/lst2[ind1]) == (lst1[ind2]/lst2[ind2]):
ind1 = 1
ind2 = 1
continue
print(True)
#return True
else:
print(False)
Я еще не использовал его, потому что хотел проверить, работает ли он, но это не так.
Что я делаю не так?
Комментарии:
1. @amit обязательно добавьте условие, что если какой-либо вектор содержит 0, то векторы больше не параллельны
Ответ №1:
Создайте список фракций n1/k1, n2/k2, n3/k3
>>> [1.0, 1.0, 1.0]
Затем используйте set
для удаления дубликатов (это означает, что соотношения одинаковы)
Тогда, если эта новая длина списка ==
равна единице, вектор параллелен
lst1 = [1,3,4]
lst2 = [2,6,8]
vect = [(x/y) for x,y in zip(lst1,lst1)]
if len(set(vect)) == 1:
print(True)
else:
print(False)
Ответ №2:
Вы должны удалить ‘continue’ из цикла while, чтобы print(True) works
. Ваш код:
lst1 = [1,3,4]
lst2 = [2,6,8]
ind1 = 0
ind2 = 1
while ind2 < len(lst1):
if (lst1[ind1]/lst2[ind1]) == (lst1[ind2]/lst2[ind2]):
ind1 = 1
ind2 = 1
print(True)
#return True
else:
print(False)
Мое предложение для решения проблемы — использовать numpy, как показано ниже:
import numpy as np
n1=np.array(lst1)
n2=np.array(lst2)
print(len(set(n1/n2))==1)
который фактически проверяет, равны ли все дроби
Ответ №3:
Псевдокод
Сначала проверьте, содержат ли ваши списки 0. Если это так, списки не параллельны.
Если у них нет нулей, пройдите цикл.
lst1 = [1,3,4]
lst2 = [2,6,8]
def parallel(lst1,lst2):
k_factor = lst1[0]/lst2[0]
for i,j in zip(lst1[1:],lst2[1:]):
if i/j != k_factor:
return print("Vectors aren't parrallel")
return print("Vectors are parallel")
parallel(lst1,lst2)
Моему алгоритму требуется проверка на наличие нулевых значений, иначе он выдаст ошибку.