預期布林值回傳真但收到假
def thing(a):
b = 1
c = 2
for x in range(len(a)):
if b == a[x:x 1] and c == a[x 1:x 2]:
return True
else:
return False
print(thing([1,3,4,1,2]))
uj5u.com熱心網友回復:
您將數字與串列切片進行比較,它們永遠不會相等,即使您只是對單個元素進行切片。您需要與特定的串列索引進行比較,而不是切片。
從串列長度中減去 1,這樣a[x 1]在最后訪問時就不會得到無效索引。
def thing(a):
b = 1
c = 2
for x in range(len(a)-1):
if b == a[x] and c == a[x 1]:
return True
return False
print(thing([1,3,4,1,2]))
uj5u.com熱心網友回復:
您的迭代不是將串列的實際內容與b和/或進行比較c。做你想做的事情的一種更簡單的方法是zip用它自己的一個切片迭代串列的 a :
>>> def thing(a):
... b = 1
... c = 2
... for x, y in zip(a, a[1:]):
... if (x, y) == (b, c):
... return True
... return False
...
>>> thing([1,3,4,1,2])
True
>>> thing([1,3,4,1,3])
False
uj5u.com熱心網友回復:
IIUC,看起來您要檢查串列中是否找到兩個連續的數字。這是您的代碼的修復:
def thing(a):
b = 1
c = 2
for x in range(len(a)-1):
if b == a[x] and c == a[x 1]:
return True
return False
print(thing([1,3,4,1,2]))
錯誤:
1- 你應該只在回圈后回傳 False
2-當你取 x 1 時,你需要回圈直到長度 - 1,否則你會遇到一個 IndexError
3-如果您要與元素進行比較,則應該只切片您想要的元素,而不是范圍
交替切片為串列:
def thing(a):
b = 1
c = 2
for x in range(len(a)-1):
if a[x:x 2] == [b, c]:
return True
return False
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351344.html
上一篇:C函式意外結果
