我有這樣的代碼,
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
if i 2 < len(l1):
if l1[i 2] == 'c':
print("ok")
else:
print("None,Error!")
else:
print("None,Error!")
i = 1
如您所見,在該else部分中,print("None,Error!")都使用了兩次。實際上,它們很長但完全相同,所以我想將它們合并以使它們簡單。但是,我需要檢查是否i 2超出串列系結,所以我無法將其重寫為
if i 2 < len(l1) and l1[i 2] == 'c':
有什么想法可以解決這個問題嗎?
uj5u.com熱心網友回復:
正如 Phu Ngo 提到的,我們可以利用短路來撰寫
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
if i 2 < len(l1) and l1[i 2]=='c':
print("ok")
else:
print("None,Error!")
i =1
如果i 2<len(l1)為 false,則l1[i 2]=='c'永遠不會計算運算式,這意味著不會引發錯誤。
這里可以考慮的另一個解決方案是 try/except 子句。
i = 0
l1 = ['a','b','c']
while(i < len(l1)):
try:
if l1[i 2]=='c':
print("ok")
else:
raise ValueError
except Exception:
print("None,Error!")
i =1
兩者都會導致列印輸出
ok
None,Error!
None,Error!
uj5u.com熱心網友回復:
除非您的資料很大,否則請放棄演算法細節并以方便的方式排列資料:
xs = ['a', 'b', 'c']
for x1, x2 in zip(xs, xs[2:] [None, None]):
print("ok" if x2 == 'c' else "None,Error!")
一般觀點的另一個說明:很少需要通過索引遍歷集合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/448612.html
標籤:Python python-3.x 算法
