生成和切片反向列表

时间:2018-12-03 18:22:06

标签: python list reverse

这可能很愚蠢和基本,但是我如何获取列表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]))或使用列表理解,但是我很好奇如何以消极的步骤来做。

3 个答案:

答案 0 :(得分:5)

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]

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

letters[4:-1:-1]

您意外得到一个空字符串的原因是,您已被要求从索引4到字符串末尾(-1),以{ {1}}。

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