14.序列与切片

序列

序列是指:内容连续、有序,可使用下标索引的一类数据容器

  • 列表、元组、字符串,均可以视为序列

序列的常用操作-切片

  • 序列支持切片,即:列表、元组、字符串,均支持进行切片操作
  • 切片:从一序列中,取出一个子序列

语法:序列[起始下标:结束下标:步长]

  • 表示从序列中,从指定位置开始,依次取出元素,到指定的位置结束,得到一个新序列
  • 起始下标表示从何处开始,可以留空,留宿视作从头开始
  • 结束下标(不含此下标,左闭右开)表示从何处结束,可以留空,留空视作截取到结尾
  • 步长表示,依次取元素的间隔,步长1表示,一个个取元素,步长2表示每次跳过1个元素取,步长N表示每次跳过N-1个元素取
  • 步长为负数表示,反向取(注意:起始下标和结束下标也要反向标记)
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = my_list[1:5:1]
result2 = my_list[1:5:2]
result3 = my_list[7:1:-1]
print(result, result2, result3)

my_tuple= (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
result = my_tuple[:]
result2 = my_tuple[::2]
result3 = my_tuple[::-2]
print(result, result2, result3)

my_str = "0123456789"
result = my_str[:3]
result2 = my_str[3::]
result3 = my_str[3::3]
print(result, result2, result3)
[2, 3, 4, 5] [2, 4] [8, 7, 6, 5, 4, 3]
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) (1, 3, 5, 7, 9) (10, 8, 6, 4, 2)
012 3456789 369
#list[起始索引:结束索引]切片时包含起始索引位置的元素,但不包含结束索引位置的元素
# 索引为 0表示第一个,1表示第二个,-1表示最后一个,-2表示倒数第二个

# list[-1]:返回最后一个数据
# list[:1]:返回0到1的数据,故返回第一个数据
# list[1:]:返回从1到0的数据,故返回第二个到最后一个的数据(不包含结束索引位置0)
# list[-1:]:返回从-1到0的数据,故返回最后一个数据
# list[:-1]:返回从0到-1的数据,故返回第一个到倒数第二个的数据(不包含结束索引位置-1)
# list[::1]:表示步长为1,步长大于0时,返回序列为原顺序;。
# list[::-1]: 表示从右往左以步长为1进行切片。步长小于0时,返回序列为倒序
# list[::2]: 表示从左往右步长为2进行切片

list = [1, 2, 3, 4, 5]
print(list[-1])  # 5
print(list[:1])  # [1]
print(list[1:])  # [2, 3, 4, 5]
print(list[-1:])  # [5]
print(list[:-1])  # [1, 2, 3, 4]
print(list[::1])  # [1, 2, 3, 4, 5]
print(list[::-1])  # [5, 4, 3, 2, 1]
print(list[::2])  # [1, 3, 5]