【问题标题】:Iterate through list and check if I am at end of list遍历列表并检查我是否在列表末尾
【发布时间】:2020-06-18 10:17:56
【问题描述】:

我有一个字符串列表:

animals = ["cat meow ", "dog bark"]

我想检查每个字符串是否包含单词"cow",这显然不存在于我的上述列表中。我正在尝试编写一个 if else 语句来检查我是否在列表的末尾以及是否找不到奶牛打印"not found "

下面的代码为每个不包含字符串的元素打印 not found 但我想在它末尾迭代整个列表时只打印一次“not found”,但我不知道正确的语法。

animals = ['dog bark' , 'cat meow ']
for pet in animals:
  if 'cow' in pet:
    print('found')
  else:
    print('not  found') 

【问题讨论】:

    标签: python list for-loop


    【解决方案1】:

    这似乎是 Python 的 any() 函数的一个很好的用例,如果可迭代对象中的任何项为真,则该函数返回 True

    animals = ['dog bark' , 'cat meow ']
    has_cow = any('cow' in a for a in animals)
    print('found' if has_cow else 'not found')
    

    但是,如果您非常渴望使用 for 循环,您可以使用标志变量来跟踪您是否在循环中找到了该项目,或者利用 Python 真正奇怪的 for-else 构造(else如果循环没有中断,则执行子句)。在十多年的 Python 编程中,我从未使用过for-else,所以这实际上只是一种语言好奇心,我强烈反对它。但它确实适用于这个特定问题!

    for a in animals:
        if 'cow' in a:
            print('found')
            break
    else:                      # WTF!?!  Don't do this, folks.
        print('not found')
    

    【讨论】:

    • 我喜欢python中的for-else。我认为它在这种情况下很有用。
    • @TheLibrarian 您可能会喜欢它,但您确实人数众多——这对每个人来说都很好。工作中的 Python 程序员还没有接受 for-else 构造。
    【解决方案2】:
    animals = ['dog bark' , 'cat meow ']
    
    print('found' if any('cow' in pet for pet in animals) else 'not found')
    

    它也适用于变量;

    result = 'found' if any('cow' in pet for pet in animals) else 'not found'
    

    【讨论】:

      【解决方案3】:

      旗帜在这种情况下会派上用场

      flag = False
      animals = ['dog bark' , 'cat meow']
      for pet in animals:
        if 'cow' in pet:
            print("Found")
            flag = True
      
      if flag == False:
          print("Not found")
      

      它将打印"Not Found"

      对于animals = ['dog bark', 'cat meow', "cow moo"],它将打印"Found"

      【讨论】:

        【解决方案4】:

        大多数编程语言都允许使用 else 语句和 if 条件语句only。然而在 Python 中,else 语句也可以与 for 循环一起使用,其中我们大多数人都不熟悉。通常,当我们搜索项目时,for/else 用于运行循环。例如:

        lis=[1,2,3]
        for i in lis:
            if i==1:
                print("1 found in list.")
                break
        else:
            print("1 is not in list.")
        

        此代码将打印:1 found in list. 当循环运行时,i 取列表中的值,if 语句将检查提供的条件,如果条件为真,将执行 print 语句。之后,break 语句被执行,它break 代码中的控制流。 Python 中的 Break 语句用于在触发某些条件时将控制带出循环。

        因此问题中的代码可以正确写为:

        animals=["dog bark","cat meow"]
        for pet in animals:
            if 'cow' in pet:
                print("Found")
                break'
        else:
            print("not found")
        

        这将打印所需的结果!

        希望对你有帮助!

        【讨论】:

          【解决方案5】:

          您可以实现将未找到的打印打印一次

          animals = ['dog bark' , 'cat meow ']
          for i, pet in enumerate(animals):
            if 'cow' in pet:
              print('found')
              break
            elif i+1 == len(animals):
              print('not  found') 
          

          或者一行

          print("found" if [i for i in animals if "cow" in i] else "not  found")
          

          如果其中一个中有奶牛,此代码将打印找到并退出循环,否则它将检查它的最后一项,如果奶牛不在该项目中,则它将打印“未找到”。

          【讨论】:

            猜你喜欢
            • 2014-03-06
            • 1970-01-01
            • 2011-12-01
            • 2015-05-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-09
            • 1970-01-01
            相关资源
            最近更新 更多