【问题标题】:Generating and slicing a reversed list生成和切片反向列表
【发布时间】:2018-12-03 18:22:05
【问题描述】:

这可能是愚蠢和基本的,但我如何获得列表edcba

当我尝试时:

import string
letters = string.ascii_lowercase
letters[4:0:-1]

'edcb'

这在某种程度上是有道理的,因为索引是 [4,3,2,1]。但是,使用 -1 会导致以下结果:

letters[4:-1:-1]

''

我知道我可以只做"".join(reversed(letters[:5])) 或使用列表理解,但我很好奇如何使用负面步骤来做到这一点。

【问题讨论】:

标签: python list reverse


【解决方案1】:

letters[4::-1],基本上就是letters[4:None:-1]

这样想slice

[element to start at: 
 element to start excluding: 
 steps]

因此,如果没有在切片的第二部分明确声明 0,您就是在告诉解释器从索引 4 开始,然后执行步骤 -1,直到找不到任何元素。

另一种可视化的方法是,如果您要向前执行此操作并想要"vwxyz",则不会使用letters[21:25:1],而只需使用letters[21:],即转换为letters[21:None:1]

【讨论】:

    【解决方案2】:
    import string
    letters = string.ascii_lowercase
    lent = len(letters)
    data = []
    for l in range(1,lent):
        total = lent - int(l)
        data.append(letters[total])
    data.append(letters[0])
    print(data)
    

    【讨论】:

    • 虽然这可能会回答作者的问题,但它缺少一些解释性文字和/或文档链接。如果没有围绕它们的一些短语,原始代码 sn-ps 并不是很有帮助。您可能还会发现how to write a good answer 非常有帮助。请编辑您的答案 - From Review
    • 感谢您的建议
    【解决方案3】:
    letters[4:-1:-1]
    

    结果你意外得到一个空字符串的原因是你要求从索引4开始,直到到达字符串的末尾(-1),步骤为-1

    在这种情况下,索引-1 等同于索引25,所以你基本上已经完成了letters[4:25:-1]——只要python 尝试评估切片中的第一项,它就完成了,因为你已经已经越界了。具有正增量的相同类型的表达式是letters[5:4]——它在开始之前就完成了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2012-08-06
      • 2010-12-14
      • 2011-07-05
      相关资源
      最近更新 更多