我有這個陣列:
X = [0,2,-1,2,1,2]
并且符號改變了兩次(這里 0 為正)。
例子:
2 比 -1(第一次)
-1 到 2(第二次)
last_sign = 1
sign_changes = 0
for x in X:
if x == 0:
sign = -1
else:
sign = x / abs(x)
if sign == -last_sign:
sign_changes = sign_changes 1
last_sign = sign
print(sign_changes)
但是當我列印結果時,我得到 4。為什么?
uj5u.com熱心網友回復:
與您所描述的不同,您將負號指定為零:請注意,您將sign = -1放在if x == 0:. 這是這里的罪魁禍首。(此外,您當前的代碼假定串列以非負數開頭。以負數開頭的串列不會產生預期的結果。)
你可以試試:
X = [0,2,-1,2,1,2]
print(sum((a >= 0) != (b >= 0) for a, b in zip(X, X[1:]))) # 2
uj5u.com熱心網友回復:
我的建議,成對迭代并檢查對是否有不同的符號:
from itertools import tee
def pairwise(iterable):
# pairwise('ABCDEFG') --> AB BC CD DE EF FG
a, b = tee(iterable)
next(b, None)
return zip(a, b)
X = [0, 2, -1, 2, 1, 2]
res = sum((before < 0) ^ (after < 0) for before, after in pairwise(X))
print(res)
輸出
2
作為替代方案,沒有任何庫,請使用:
res = sum((before < 0) ^ (after < 0) for before, after in zip(X, X[1:]))
表達方式:
(before < 0) ^ (after < 0)
是一個異或,如果布林值不同,它只會是 True (1)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362850.html
上一篇:將陣列結果添加到字串
