【问题标题】:For loop starts with "c" instead of "d"For循环以“c”而不是“d”开头
【发布时间】:2020-06-04 11:17:54
【问题描述】:
   s="abcd" 
   for i in range(len(s)-1)[::-1]: 
        print(s[i]) 

我不明白这个 for 循环是如何工作的?

【问题讨论】:

  • range 不包括结尾,所以range(len(s))0, 1, 2
  • 注意len(s)-1中的负1

标签: python for-loop reverse


【解决方案1】:

类范围(开始,停止[,步骤])

范围类型表示不可变的数字序列,通常用于在 for 循环中循环特定次数。 (取自 python 文档)。

如需进一步阅读,请转到 python 文档:range

阅读以上内容(取自 python 文档)并打印表达式:range(len(s)-1)[::-1]

print(range(len(s)-1)[::-1])

产生:

range(2, -1, -1)

所以我们的代码变成了:

   s="abcd" 
   for i in range(2, -1, -1): 
        print(s[i]) 

现在我希望你明白 python 在幕后做了什么!

【讨论】:

    【解决方案2】:

    所以你的范围从 0 到 2 (len(s)-1) - 1[::-1] 反转范围发送的任何内容。

    所以你的循环从 2 到 1 到 0

    s = "abcd"

    for 2 > it prints c
    for 1 > it prints b
    for 0 > it prints a
    

    如果你想从d开始:

    s="abcd" 
    for i in range(len(s))[::-1]: 
        print(s[i]) 
    

    【讨论】:

    • “i”是从 0 开始还是从 len(s)-1 开始
    【解决方案3】:

    对于s="abcd",我们有len(s)-1 等于3

    range(3) 生成 (0, 1, 2)

    (0, 1, 2)[::-1] 产生(2, 1, 0)

    所以 for 循环将在 (2, 1, 0) 中为 i 打印 s[i],从而得到 cba

    【讨论】:

      【解决方案4】:

      这是因为您的范围被转换为range(2, -1, -1)。您只需从 range (len(s) -1)[::-1] 中删除 -1。

      【讨论】:

      • 那么在这种情况下,我是从 len(s)-1 开始,还是从 0 开始,字符串反转?
      • 不,您应该将 range(len(s) -1)[::-1] 替换为 range(len (s))[::-1]。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2020-12-10
      • 1970-01-01
      相关资源
      最近更新 更多