![](/img/trans.png)
[英]How to generate a rotationally symmetric function with a 1d array in 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.