定义返回项目索引的过程,如果项目不在列表中,则定义为-1
def ser(a,b):
for j in a:
if j == b:
return (a.index(b))
else:
return -1
print (ser([1,2,3],3))
总是让我回归-1。如果我削减其他'部分,它的工作原理。那为什么呢?
答案 0 :(得分:2)
这是因为第一次与循环中的条件不匹配时,您会立即返回并离开您的方法。你需要在这里重新思考你的逻辑,以确定当你不匹配时你想要做什么。最终,您希望继续循环,直到您的支票用完为止。
因此,只需将return -1
设置在循环之外即可。如果你经历整个循环,你没有找到你的匹配,那么你可以返回-1
def ser(a,b):
for j in a:
if j == b:
return (a.index(b))
return -1
print (ser([1,2,3],3))
或者,可以使用in来避免循环。所以,你实际上可以重新编写你的方法:
def ser(a, b):
if b in a:
return a.index(b)
return -1
您正在检查项目b
是否在列表a
中,如果是,则返回索引,否则返回-1
为了进一步简化,您实际上可以将其设置为return
中的一行:
def ser(a, b):
return a.index(b) if b in a else -1
答案 1 :(得分:1)
else
块在第一次迭代不满足j == b
后执行。
如果在for
循环耗尽之后未找到该项目,则最好将else块移动到for
执行:
def ser(a,b):
for j in a:
if j == b:
return (a.index(b))
else: # or put default return on this line
return -1
更重要的是,您还可以使用b in a
检查遏制,而无需遍历列表。
答案 2 :(得分:0)
在for循环的第一次迭代中,它将测试数组中的第一个元素是否等于b。它不是,因此代码立即返回-1,而不测试数组的其他元素。
对于您的情况,正确的代码是:
def ser(a,b):
for j in a:
if j == b:
return (a.index(b))
return -1
这样,代码将尝试数组中的所有元素,如果它们都不等于b,则返回-1。
答案 3 :(得分:0)
你不需要做任何花哨的事情,简单的单线工作就可以了:
def ser(a,b):
return a.index(b) if b in a else -1
# Example
my_list = [1, 2, 3, 4]
ser(my_list, 2)
# returns: 1
ser(my_list, 8)
# returns: -1