【问题标题】:How to count down in for loop? [duplicate]如何在for循环中倒计时? [复制]
【发布时间】:2015-05-31 06:38:06
【问题描述】:

在 Java 中,我有以下 for 循环,我正在学习 Python:

for (int index = last-1; index >= posn; index--)

对于大多数熟悉 Python 的人来说,我的问题很简单而且可能很明显。我想用 Python 编写那个“for”循环。我该怎么做?

我尝试执行以下操作:

for index in range(last-1, posn, -1):

我认为应该是range(last-1, posn + 1, -1)。我说的对吗?

感谢任何人,特别是向我解释如何理解 Python 中的索引工作的人。

【问题讨论】:

  • 上面写着IndexError: list index out of range
  • 顺便说一句:根据您的操作,您可能更喜欢枚举:for i, e in reversed(list(enumerate(list_here))): 我将从最后一个元素开始计数,而 e 将是实际元素
  • @Jika 所以看看范围生成的索引。然后修复你的代码。

标签: python


【解决方案1】:

python中的range函数语法如下:

range(start, end, step)

它的语法与 Python 列表的语法相同,开始包含但结尾不包含。

所以如果你想从 5 数到 1,你会使用 range(5,0,-1),如果你想从 last 数到 posn,你会使用 range(last, posn - 1, -1)

【讨论】:

  • 为了确定,这个-1是因为它从10倒退到0?
  • @timman 正确。例如,如果你想从 10 倒退到 5,那就是range(10, 4, -1)
【解决方案2】:

如果你用谷歌搜索。 “Count down for loop python”你得到了这些,非常准确。

how to loop down in python list (countdown)
Loop backwards using indices in Python?

我建议在发布之前进行少量搜索。 “Learn Python The Hard Way”也是一个很好的起点。

【讨论】:

    【解决方案3】:

    首先我建议您可以尝试使用打印并观察操作:

    for i in range(0, 5, 1):
        print i
    

    结果:

    0
    1
    2
    3
    4
    

    你可以理解功能原理。 其实range的扫描范围是从05-1。 它等于0 <= i < 5

    当你真正理解了 Python 中的 for-loop 之后,我想是时候回到正题了。让我们专注于您的问题。

    您想在 python 中使用 DECREMENT for 循环。 例如,我建议使用 for-loop 教程。

    for i in range(5, 0, -1):
        print i
    

    结果:

    5
    4
    3
    2
    1
    

    由此可见,等于5 >= i > 0

    你想用python实现你的java代码:

    for (int index = last-1; index >= posn; index--)
    

    它应该这样编码:

    for i in range(last-1, posn-1, -1)
    

    【讨论】:

      【解决方案4】:

      在python中,当你有一个可迭代对象时,通常你在没有索引的情况下进行迭代:

      letters = 'abcdef' # or a list, tupple or other iterable
      for l in letters:
          print(l)
      

      如果您需要以相反的顺序遍历可迭代对象,您可以这样做:

      for l in letters[::-1]:
          print(l)
      

      当出于任何原因需要索引时,可以使用enumerate

      for i, l in enumerate(letters, start=1): #start is 0 by default
          print(i,l)
      

      你也可以倒序枚举...

      for i, l in enumerate(letters[::-1])
          print(i,l)
      

      在另一张纸条上...

      通常当我们遍历一个可迭代对象时,我们会为每个元素应用相同的过程或函数。在这些情况下,最好使用map

      如果我们需要将每个字母大写:

      map(str.upper, letters)
      

      或者获取每个字母的Unicode码:

      map(ord, letters)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-11
        • 1970-01-01
        • 1970-01-01
        • 2016-11-06
        • 2014-03-02
        • 2021-12-09
        相关资源
        最近更新 更多