在列表中查找字符串并返回索引或-1

时间:2016-09-22 12:29:10

标签: python list indexing

定义返回项目索引的过程,如果项目不在列表中,则定义为-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。如果我削减其他'部分,它的工作原理。那为什么呢?

4 个答案:

答案 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
相关问题