簡體   English   中英

我如何在 python 中制作 function 以檢查列表是否為矢量

[英]how do i make function in python that check if the lists is vector

我的任務是實現一個 function parallel_vec(lst1, lst2)和 2 個 arguments lst1lst2 ,它們是長度為n的列表,代表兩個向量。

如果向量“平行”,則 function 將返回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)

我還沒有 function 它,因為我想檢查它是否有效,但它沒有。 我究竟做錯了什么?

創建分數n1/k1, n2/k2, n3/k3的列表

>>> [1.0, 1.0, 1.0]

然后使用set刪除重復項(這意味着比率相同)

那么如果這個新的列表長度==為 1,則向量是平行的

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)

您必須從 while 循環中刪除 'continue' 才能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)

它實際上檢查所有分數是否相等

偽代碼

首先檢查您的列表是否包含 0。如果是,則列表不是並行的

如果它們沒有零,則 go 通過循環。

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)

我的算法需要檢查 null 值,否則會拋出錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM