Python 中的线性搜索 - 总是使用 else 语句

Posted

技术标签:

【中文标题】Python 中的线性搜索 - 总是使用 else 语句【英文标题】:Linear search in Python - always going to else statement 【发布时间】:2021-02-21 21:59:59 【问题描述】:

我是一名初学者,目前正在使用 Python 开发一个有趣的程序,我正在尝试完成对给定列表的线性搜索。程序不是返回在列表中搜索的值的索引,而是返回 else 条件。

我创建了另一个名为 getVal 的函数,这样 getVal 的输出将作为参数/参数之一传递给线性搜索函数。

我将如何更正此问题,以便在线性搜索函数中搜索的值的索引号将成为输出?任何帮助将不胜感激。

def getVal():
    userNum = int(input("Enter a number: "))
    return userNum
    if userNum != int:
       get Val

def linearSearch(searchList, getVal):
for i in range(len(searchList)):
    if i == getVal:
        return searchList.index(i)
    else:
        return "Value not found"

getVal()
linearSearch(searchList, getVal)
searchList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

【问题讨论】:

你的例子似乎有点乱码。您对变量和函数使用相同的名称,这绝不是一个好主意。对getVal() 的调用正在丢弃返回值。然后它似乎作为参数传递给linearSearch,在那里它似乎被视为列表索引。而在getVal 本身中,get Val 是无效的语法。 【参考方案1】:

欢迎使用 Python - 这是在列表中搜索的错误方式。

    您将要查找的值与索引(range 的结果)进行比较,而不是与列表中的实际值进行比较。

    您的else 子句指示函数在第一次检查(在循环的第一次迭代中)失败后立即返回。

要在 Python 中创建 for 循环遍历列表值及其索引,您需要使用 enumerate 函数,如下所示:

def linearSearch(searchList, searchVal):
    for index, value in enumerate(searchList):
        if value == searchVal:
            return index
    
    # this line must only be reached if the loop ends without finding a match!
    return "Value not found"

另请注意,虽然 Python 确实允许函数返回不同类型的值,但让函数在一种情况下返回字符串而在另一种情况下返回数字是不好的做法。

特别是因为您的函数可用于搜索包含字符串或任何其他类型数据的列表。

相反,如果未找到匹配项,您的函数应返回 None。 然后,您可以检查该特定值并打印相应的错误消息:

val = getVal()
res = linearSearch(searchList, val)
for is not None:
    print(" found at index ".format(val, res))
else:
    print("Value not found")

最后,您的getVal 函数不会像您预期的那样检查该值是否为整数,而是如果用户输入的不是整数,则会破坏程序。

通常,整数输入的测试是使用try .. except 块完成的,但是由于您是 Python 新手,您可能还没有接触到异常的主题,但是这里有一些关于检查是否有整数的其他方法的建议: How can I check if a string represents an int, without using try/except?

【讨论】:

【参考方案2】:

您的代码有几个问题:

if userNum != int: get Val - 这永远不会执行,因为它在 return 语句之后,并且它包含语法错误 (get Val),并且您正在比较 userNum 是一个整数,int 这是一个类型 在for 循环中,除非用户想要找到第一个元素,否则将始终返回“找不到值” 您调用 getVal() 的方式 - 您没有将结果分配给任何变量 您将getVal 作为参数传递给linearSearch,但getVal 是一个函数,而不是用户输入的值

固定代码:

In [1]: def getVal():
   ...:     userNum = int(input("Enter a number: "))
   ...:     return userNum
   ...:
   ...: def linearSearch(searchList, val):
   ...:     for i, item in enumerate(searchList):
   ...:         if item == val:
   ...:             return i
   ...:     else:
   ...:         return "Value not found"
   ...:
   ...: val = getVal()
   ...: searchList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
   ...: linearSearch(searchList, val)
   ...:
   ...:
Enter a number: 3
Out[1]: 2

【讨论】:

以上是关于Python 中的线性搜索 - 总是使用 else 语句的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的线性搜索总是返回 false,即使该项目在数组中?

解决python开发中模块冲突的具体方法?

为啥我的线性搜索比我在 Python3 中的二分搜索运行得更快?

Python for..else 循环总是触发 else

在python程序编写过程中,如何解决模块名称冲突?

线性搜索 - Python