关于步长的进一步补充解释
翻看了之前学习python中关于步长踩坑的笔记,才发现自己又一次栽进去了,这么说原先的学习中一定是存在了很大的问题,或者压根没搞清楚其中的含义。最近deep seek风靡全球,我这次也用它来进行更多的深入学习。
在Python中,切片操作的语法是 [start:end:step]
,其中start是起始索引,end是结束索引(但不包括该索引对应的元素),step是步长。默认情况下,start是0,end是序列长度,step是1。如果步长为正数,切片从左到右进行;如果为负数,则从右到左。
现在来看例子:str[1:5:2]
。这里的str是一个字符串。假设str是"abcdef",那么索引0是'a',1是'b',2是'c',3是'd',4是'e',5是'f',依此类推。
根据切片规则,start是1,end是5,step是2。所以起始位置是索引1的元素,即第二个字符。结束位置是索引5,但不包括它。步长是2,意味着每隔一个字符取一个。
接下来需要确 定切片的范围。从索引1开始,每次增加2。所以第一次取索引1,然后索引1+2=3,接着3+2=5。但是因为end是5,所以索引5是不包含的,因此实际取的是索引1和3的元素。
例如,如果str是"abcdefgh",那么索引1到5的元素是"b c d e f"。但步长是2,所以选中的索引是1、3,对应的字符是'b'和'd'。因此结果应该是"bd"。
print(''.join(sorted("snake")))
str = '123456789'
print(str) # 输出字符串
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第六个的字符(不包含)
print(str[2:]) # 输出从第三个开始后的所有字符
print("----------------")
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔一个的字符(步长为2)
# 23/45/67
print(str * 2) # 输出字符串两次
print(str + '你好') # 连接字符串
print('------------------------------')
print('hello\nrunoob') # 使用反斜杠(\)+n转义特殊字符
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
小技巧
参数 | 方向 | 作用 |
| 左→右 | 起始位置(包含) |
| 左→右 | 结束位置(不包含) |
| 正数→正向取 | 负数→反向取(需调换start/end) |