【问题标题】:Reversing the list in python在python中反转列表
【发布时间】:2014-03-19 00:59:39
【问题描述】:
In [122]: a = range(10)

In [123]: a[: : -1]
Out[123]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

你能解释一下表达式 a[: : -1] 吗?

a[:] 很容易理解 -> “从头开始(冒号前的空格)并检索列表直到最后(冒号后的空格)”

但我没有得到表达式 a[: : -1] 中两个冒号的实际作用。

【问题讨论】:

  • 我的问题有点不同。 In [124]: a[: : 2] Out[124]: [0, 2, 4, 6, 8] 如果我们将 i 视为 a[: : i] 中的步长,很明显输出将是像 [start, start + step, start + 2*step.... 等等]。所以在 a[: : -1] 它必须像 [0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 但事实并非如此
  • 终于明白了!!! step 的负值改变了 start 和 end 的解释。所以在负步的情况下开始变成结束,结束变成开始

标签: python-2.7


【解决方案1】:

一个切片需要三个参数,就像range:开始、停止和步进:

[0, 1, 2, 3, 4, 5][0:4:2] == list(range(0, 4, 2)) # every second element from 0 to 3

负步骤导致切片通过迭代向后工作。没有开始和停止(即只是步骤[::-1]),它从最后开始,因为它正在向后工作。

【讨论】:

    【解决方案2】:

    第三个参数(在两个 : 之后)是步长。 -1 可以解释为倒退。换句话说,颠倒列表。

    尝试使用 -2 步长,即a[::-2],你会得到:

    [9, 7, 5, 3, 1]
    

    希望这会有所帮助。

    更详细的答案和解释在这里Explain Python's slice notation

    【讨论】:

    • In [124]: a[: : 2] Out[124]: [0, 2, 4, 6, 8] 如果我们将 i 视为 a[: : i] 中的步长,很明显输出会像 [start, start + step, start + 2*step.... 等等]。所以在 a[: : -1] 中它必须像 [0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 但事实并非如此......
    • 是的,那是因为当您将步长设置为 2 时,索引相隔 2 计数。 0,然后 2,然后 4,依此类推,直到 8。
    • @neel101:这是我在您编辑后的评论。在 i
    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 2021-09-21
    • 1970-01-01
    • 2016-02-17
    • 2021-07-28
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多