【问题标题】:finding string in a list and return it index or -1在列表中查找字符串并将其返回 index 或 -1
【发布时间】:2016-09-22 12:29:10
【问题描述】:

定义一个返回项目索引的过程,如果项目不在列表中,则返回 -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。如果我剪掉“其他”部分,它会起作用。那为什么呢?

【问题讨论】:

  • 想一想,如果a的第一个元素不等于b会发生什么。
  • 您的函数在第一次搜索不成功后返回 -1。

标签: python list indexing


【解决方案1】:

这是因为第一次不匹配循环中的条件时,您会立即返回并离开您的方法。您需要在这里重新考虑您的逻辑,以确定当您不匹配时您想要做什么。最终,您希望继续循环,直到检查完所有检查。

因此,只需将您的 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

【讨论】:

    【解决方案2】:

    else 块在第一次迭代不满足j == b 后执行。

    最好将 else 块移动到 for,如果在 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 来检查包含情况,而无需遍历列表。

    【讨论】:

      【解决方案3】:

      在for循环的第一次迭代中,它将测试数组中的第一个元素是否等于b。不是,所以代码立即返回 -1,而不测试数组的其他元素。

      对于您的情况,正确的代码是:

      def ser(a,b):
          for j in a:
              if j == b:
                  return (a.index(b))
          return -1
      

      这样,代码会尝试数组中的所有元素,如果没有一个元素等于b,则返回-1。

      【讨论】:

        【解决方案4】:

        你不需要做任何花哨的事情,简单的单线就可以了:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-11
          • 1970-01-01
          相关资源
          最近更新 更多