【问题标题】:Starting from a specific point in a For loop从 For 循环中的特定点开始
【发布时间】:2017-05-24 03:12:10
【问题描述】:

是否可以告诉 For 循环从特定位置开始?

>>> languages = ["C", "C++", "Perl", "Python"] 
>>> for x in languages:
...     print(x)
... 
C
C++
Perl
Python
>>> 

如何让脚本从“Perl”开始?我不需要它循环回来。

【问题讨论】:

标签: python


【解决方案1】:

你可以试试:

languages = ["C", "C++", "Perl", "Python"]
for i in range(languages.index("Perl"),len(languages)):
    # 1st parameter of range will find Perl's index from list languages
    #2nd parameter - Length of list
    print languages[i]


Perl
Python

【讨论】:

    【解决方案2】:

    如果你想要从 perl 开始到列表结尾的元素

    languages = ["C", "C++", "Perl", "Python"]
    print languages
    

    通过列表切片很容易

    print languages[2:]
    

    输出:

    ['Perl', 'Python']
    

    您可以循环此列表并在单独的行上获取元素。

    即使你想将环回元素从 perl 获取到 back-to-perl,你也可以使用列表切片

    a = []
    a.extend(languages[2:])
    a.extend(languages[:2])
    print a
    

    输出:

    ['Perl', 'Python', 'C', 'C++']
    

    【讨论】:

      【解决方案3】:

      试试这个。希望对你有帮助

      languages = ["C", "C++", "Perl", "Python"]
      
      for k in range(0,len(languages)):
        print(languages[k-2])
      

      输出是:

      Perl
      Python
      C
      C++
      

      在 python 中,for 循环函数是 (for k in x(start,stop,step))。这里 x 是您的列表或字符串变量,并且

      start : Indicates where the for loop should start and the index starts from zero.
      
      stop : Indicates where the for loop ends. It takes up to (n-1) elements.
      

      例如:

      for k in range(0,100):
      

      它提供从零到 99 的输出,如果你想要输出 100。你应该这样提及:

      n = 100
      for k in range(n+1):
          print k
      

      输出从 0 到 100。在这种情况下,for 循环将从零获取索引(开始)。

      step : Indicates how many steps should do in for loop. By default step is one in for loop.
      

      例如:

      for k in range(0,10,1):
          print k
      #output is 0,1,2,3,4,5,6,7,8,9
      
      
      for k in range(0,10,2):
          print k
      #output is 0,2,4,6,8
      
      for k in range(0,10,3):
          print k
      #output is 0,3,6,9
      

      【讨论】:

        【解决方案4】:

        您可以为此使用itertools.dropwhile

        >>> import itertools
        
        >>> languages = ["C", "C++", "Perl", "Python"] 
        
        >>> for language in itertools.dropwhile(lambda x: x != 'Perl', languages):
        ...     print(language)
        ... 
        Perl
        Python
        >>> 
        

        itertools.dropwhile 接受两个参数,一个确定列表元素是否等于您想要的起始值的函数,以及您想要循环的可迭代对象(在您的情况下为列表)。 dropwhile 会跳过元素,直到找到满足函数的元素,然后输出所有元素,直到 iterable 用完为止。

        如果您选择起点的标准比简单的相等更复杂,这很有用。例如,如果您想从第一个以“P”开头的元素开始,您可以这样做:

        >>> for language in itertools.dropwhile(lambda x: not x.startswith('P'), languages):
        ...     print(language)
        ... 
        Perl
        Python
        >>> 
        

        与此相反的是itertools.takewhile,只要满足提供的函数,它就会迭代。

        【讨论】:

          【解决方案5】:

          可以使用myList[start:stop:skip] 对列表按其索引进行切片。从第三个索引(零索引)开始,没有停止,也没有跳过索引,将是:

          for x in languages[2::]:
              print x
          

          会给你:

          Perl
          Python
          

          另请参阅:Explain Python's slice notation

          【讨论】:

          • 语言中的 x 有什么用[languages.index("Perl")::]?
          • @AriGold 我不确定那是什么......它会为我产生语法错误
          • 真的,没办法,把languages[2::]替换成languages[languages.index("Perl"):],给Perl的index这样就不需要int了
          【解决方案6】:
          languages = ["C", "C++", "Perl", "Python"]
          # add start index range by the index of "Perl" 
          for x in languages[languages.index("Perl"):]:
            print(x)
          
          # Perl
          # Python
          
          for x in languages[languages.index("C++"):]:
            print(x)
          
          # C+=
          # Perl
          # Python
          

          【讨论】:

            猜你喜欢
            • 2012-12-12
            • 2021-12-18
            • 1970-01-01
            • 1970-01-01
            • 2021-10-18
            • 2013-06-22
            • 1970-01-01
            • 2014-05-16
            • 1970-01-01
            相关资源
            最近更新 更多