Python 线性搜索-使用列表匹配整数

Python 线性搜索-使用列表匹配整数,python,linear-search,Python,Linear Search,您好,我是python新手,这是我尝试做的,我有下面的列表 x= [1,2,3,4,5,6,7,8,9] 下面是我的python代码: length = len(x) c = input("Enter a no\n") for i in range (length): if x[i] == c: print ("Found at position ", i) else: print("not found") 并且输出是接收的 Enter a

您好,我是python新手,这是我尝试做的,我有下面的列表

x= [1,2,3,4,5,6,7,8,9]
下面是我的python代码:

length = len(x)
c = input("Enter a no\n")

for i in range (length):
    if  x[i] == c:
        print ("Found at position ", i)
    else:
        print("not found")
并且输出是接收的

Enter a no
2
not found
not found
not found
not found
not found
not found
not found
not found
not found
现在,在我几乎不知道的情况下,我发现这个“未找到的倍数”正在发生,因为每次循环都会对列表进行“否”检查,如果它不可用,则会由于缺少适当的
bike
statement而移动到else部分,但当它进入x[i]时,我无法找出什么其匹配,然后输出应位于位置1。我在某个地方读到,如果x[i]中的c需要使用
,但它不起作用。另一方面,我重新编写了代码

def ls():
    t = int(input("Enter your search no \n"))
    for i in x:
        if i!= t:
            continue
        print("Your value is present in ")

        break
    else:
        print ("parrrrrrrrrrr")

ls()
这一切都很好。如果我能了解以下情况,将会有所帮助:

  • 对于第一个程序,为什么即使列表中存在输入,也找不到其显示
  • 输入x[i]中c的部分根据我的了解(现在没有意义)发生了相同的问题,它也应该工作
  • 如果是整数vs列表的情况,那么我的第二个代码是如何工作的 -这是做线性搜索的正确方法吗
  • 因为input返回一个
    str
    对象,然后与
    int
    对象进行比较,而不进行隐式转换,所以表达式总是
    False
  • c在x中
    其中x是一个列表,但是
    x[i]
    在您的例子中是一个整数
  • 第二个代码正在工作,因为您隐式地将输入转换为
    int
  • 在我看来,最优雅的方式是:

    c = input("Enter a no\n")
    items = [1,2,3]
    print(items.index(int(c)) if int(c) in items else 'Not found')
    
    当然,若输入不能转换为整数,不要忘记捕捉ValueError

  • 因为input返回一个
    str
    对象,然后与
    int
    对象进行比较,而不进行隐式转换,所以表达式总是
    False
  • c在x中
    其中x是一个列表,但是
    x[i]
    在您的例子中是一个整数
  • 第二个代码正在工作,因为您隐式地将输入转换为
    int
  • 在我看来,最优雅的方式是:

    c = input("Enter a no\n")
    items = [1,2,3]
    print(items.index(int(c)) if int(c) in items else 'Not found')
    

    当然,如果输入不能转换为整数,不要忘记捕获ValueError。问题是您试图将
    str()
    int()
    进行比较。线性搜索有O(n),但是如果你的列表被排序,你可以使用O(logn)。wtf:我忘了输入需要一个字符串,非常感谢,是否有任何链接可以解释O(n)的细节。感谢@VadymStupakovjust在google
    big o notation
    中键入,问题是您试图将
    str()
    int()
    进行比较。线性搜索有O(n),但是如果你的列表被排序,你可以使用O(logn)。wtf:我忘了输入需要一个字符串,非常感谢,是否有任何链接可以解释O(n)的细节。感谢@VadymStupakovjust输入google
    big o notation
    @SubhaSaha,我已经用更多的数据解释更新了我的答案,感谢你的详细回答并提到了价值点错误,我最近学习了错误处理的概念。def thankyou():@OlegRybalchenko:}@subhasha,不客气:)如果没有更多问题,请将其标记为答案)当然,没有问题:)@subhasha,我已经更新了我的答案,并提供了更多的数据解释,感谢您的详细回答和提到价值点错误,我最近学习了错误处理的概念。def thankyou():@OlegRybalchenko:}@subhasha,不客气:)如果没有问题,请将其标记为答案)当然,没有问题:)