как мне создать функцию в python, которая проверяет, является ли список векторным

#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)

 

Моему алгоритму требуется проверка на наличие нулевых значений, иначе он выдаст ошибку.