Python切片操作基础与应用

55 阅读4分钟

介绍

在Python编程中,切片操作是一种强大且高效的序列数据访问技术。本教程将通过一个网球赛事数据管理的实际案例,详细介绍Python切片操作的基本语法、常见用法和高级技巧。通过学习本教程,您将掌握如何利用切片操作快速、灵活地处理和提取序列数据,提高数据处理效率。

案例:网球赛事数据切片管理

代码

s = 'ATP是男子网球协会,WTP是女子网球协会' #字符串   #str()函数用来将其他类型转成字符串
#用切片输出ATP和WTA
print(s[0:3],s[11:14]) #切片第一个冒号前面的数字表示从第几个字符开始,第一个冒号后面的数字表示到第几个字符结束,不包含最后一个字符
TOURNAMENT = ['广州','九江','广岛','香港',
              '宁波','东京','首尔',
              '迪拜','武汉','北京','多哈',
              '澳网','法网','温网','美网',
              '利雅得']
#用切片输出WTA250赛事包括 广州、九江、广岛、香港
print("WTA250赛事包括",end='')
print(','.join(TOURNAMENT[:4])) #第一个冒号前面如果是0,则可以省略
#用切片输出WTA500赛事包括 '宁波','东京','首尔',
print("WTA500赛事包括",end='')
print(','.join(TOURNAMENT[4:7]))
#用切片输出WTA1000赛事包括 '迪拜','武汉','北京','多哈',
print("WTA1000赛事包括",end='')
print(','.join(TOURNAMENT[7:11]))
#用切片输出WTA2000赛事包括 '澳网','法网','温网','美网',
print("WTA2000赛事包括",end='')
print(','.join(TOURNAMENT[11:15]))
#用切片输出WTA1500赛事包括 '利雅得'
print("WTA1500赛事包括",end='')
print(','.join(TOURNAMENT[15:])) #切片第一个冒号后面的数字如果大于等于集合的长度,可以省略
TOURNAMENT = ['WTA250','WTA500','WTA1000','WTA2000','WTA1500'
              'ATP250','ATP500','ATP1000','ATP2000','ATP1500'
              'ITF250','ITF500','ITF1000','ITF2000','ITF1500']
#用切片输出250赛事WTA250,ATP250
print("250个积分的赛事包括:",end='')
#切片第一个冒号前面的数字表示从第几个字符开始,第一个冒号后面的数字表示到第几个字符结束,不包含最后一个字符
#第二个冒号表示步长,默认为1
print(','.join(TOURNAMENT[::5]))
#用切片输出500赛事WTA500,ATP500
print("500个积分的赛事包括:",end='')
print(','.join(TOURNAMENT[1::5]))
#用切片输出1000赛事WTA1000,ATP1000
print("1000个积分的赛事包括:",end='')
print(','.join(TOURNAMENT[2::5]))
#用切片输出2000赛事WTA2000,ATP2000
print("2000个积分的赛事包括:",end='')
print(','.join(TOURNAMENT[3::5]))
#用切片输出1500赛事WTA1500,ATP1500
print("1500个积分的赛事包括:",end='')
print(','.join(TOURNAMENT[4::5]))
#TOURNAMENT WTA250元素前插入‘WTA125',插入完成后在ATP250前插入'ATP125'
TOURNAMENT = ['WTA125'] + TOURNAMENT[0:5] + ['ATP125'] + TOURNAMENT[5:]
#在ATP1500之后插入'UNITED_CUP'
#TOURNAMENT = TOURNAMENT[0:12] + ['UNITED_CUP'] + TOURNAMENT[12:]
TOURNAMENT.insert(12,'UNITED_CUP')
print(TOURNAMENT)
print("WTA和ATP巡回赛中250个积分的赛事包括:",end='')
#用切片输出WTA250赛事和ATP250赛事
print(','.join(TOURNAMENT[1:12:6]))

代码结果

0.png

代码分析

  1. 基础切片操作

    • 字符串切片:s[0:3]获取索引0到2的字符(不包含索引3)
    • 列表切片:TOURNAMENT[:4]获取前4个元素,等价于TOURNAMENT[0:4]
    • 省略参数:起始索引为0时可省略,结束索引为序列长度时可省略
  2. 分步切片操作

    • [4:7]:获取索引4到6的元素(WTA500赛事)
    • [7:11]:获取索引7到10的元素(WTA1000赛事)
    • [11:15]:获取索引11到14的元素(WTA2000赛事)
    • [15:]:获取从索引15开始到末尾的所有元素
  3. 带步长的切片操作

    • [::5]:从开头到结尾,每隔5个元素取一个(获取所有250积分赛事)
    • [1::5]:从索引1开始,每隔5个元素取一个(获取所有500积分赛事)
    • [2::5]:从索引2开始,每隔5个元素取一个(获取所有1000积分赛事)
  4. 高级切片应用

    • 使用切片进行列表拼接:['WTA125'] + TOURNAMENT[0:5] + ['ATP125'] + TOURNAMENT[5:]
    • 使用insert()方法在特定位置插入元素
    • 复合切片:[1:12:6]从索引1到11,每隔6个元素取一个
  5. 注意事项

    • 代码中有一处字符串拼接错误:'WTA1500''ATP250'之间缺少逗号,导致两个字符串被拼接
    • 索引是从0开始计数的
    • 切片操作创建的是原序列的副本,不会修改原序列