簡體   English   中英

對稱一維數組 Python

[英]Symmetric 1D array Python

所以我有

A = [1,2,3,4]

我想檢查數組是否對稱。 所以 output 將是False

另一個例子是

arr = [1,2,3,3,2,1]
out = fun(arr)
out = True

我一直在嘗試

def checksymm(a):
    flag = 0

    for i in range(0,len(a)/2):
        if np.abs(a[i]) == np.abs(a[-i]):
            return True
        else:
            return False

我做錯了什么? 謝謝。

對應的a[i]應該是a[-1-i] ,而不是a[-i]

此外,為什么不反轉列表並比較每個元素:

def isSymmetric(arr):
    return (arr == arr[::-1]).all()

可能最有效的方法是將比較限制在數組的每一半:

n = len(arr) // 2
result = np.all(arr[:n] == arr[-1:-n - 1:-1])

具有絕對值:

result = (np.abs(arr[:n]) == np.abs(arr[-1:-n - 1:-1])).all()

兩種公式都應直接與列表或 arrays 一起使用。

比較時,請注意索引,0 與 -1,1 與 -2 等(不是 1 與 -1),因此它應該是i-i-1 同樣,不要在找到一個相等性后返回True ,而應在所有相等性后返回......

arr = [1,2,3,3,2,1]

def checksymm(a):

    for i in range(0,len(a)//2):
        if a[i] != a[-i-1]: # or  np.abs(a[i]) != np.abs(a[-i-1]) as in the original code
            return False
    return True

    
out = checksymm(arr)
print(out)

>>> True

和:

arr = [1,2,3,3,5,1]
out = checksymm(arr)
print(out)

>>> False

編輯:我試圖找到你的代碼的問題並修復它,但我會推薦@songziming 的答案更好。

暫無
暫無

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

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