从本例学到什么

  1. 列表的切片操作,关于切片的写法和含义。
  2. 列表的逆向切片。所谓逆向切片,指的是得到逆序的子列表,子列表内的元素之间的顺序与母列表内这些元素的顺序是相反的。比如,母列表是[1, 20, 8, 80, 3, 30],逆向切片得到的子列表是[30, 80, 20]。

实例程序

题目描述

翻转数组
输入一组数(少于50个元素),要求对该数组元素进行倒序输出。

输入格式:
第一行输入一个数n表示数组中元素个数,然后一行输入n个整数,数与数间用空格隔开。

输出格式:
将该组数倒序输出,数与数间用一个空格隔开,第一个数前无空格,最后一个数后无空格。

输入样例:
12
36 74 20 96 21 48 99 68 84 81 34 53

输出样例:
53 34 81 84 68 99 48 21 96 20 74 36

上述题目的参考答案

n = int(input())
#输入n个整数
n_strs = input().split()
ns = []
for s in n_strs:
    ns.append(int(s))
#逆序输出n个整数
print(ns[-1], end='')
for i in ns[-2::-1]:
    print(" %d"%i, end='')

上述代码中,3-6行可以简写为:

ns = [int(s) for s in input().split()]

8-10行可以简写为:

print(' '.join([str(s) for s in ns[::-1]]))

知识点讲解

  1. 列表的切片操作的完整写法是:列表名[起点:终点:增量]。其中,列表名代表了一个列表;起点是一个整数,用作列表索引;终点是一个整数,用作列表索引;增量是一个整数,代表索引递增的差量。
  2. 比如,ns[0:8:1]是列表切片的例子。列表名是ns,起点是0,终点是8,增量是1。
  3. 增量部分(包括冒号)可以省略。比如写作:ns[0:8],这里起点是0,终点是8,增量省略。省略增量就意味着增量是1。
  4. 下面解释列表切片的含义。**列表切片是从列表中抽取元素,生成子列表。**我们用例子来说明:
    (1)ns[0:3],增量为1,抽取的是索引为0, 1, 2的元素,构成子列表。注意,不包含索引为3的元素。假设ns=[10, 20, 30, 40, 50],那么ns[0:3]所生成的列表是[10, 20, 30]。如果你会用range()函数,你会发现range(0, 3)与[0:3]有相似之处。
    (2)假设ns=[10, 20, 30, 40, 50],那么ns[0:4:2]生成的子列表是[10, 30]。ns[0:4:2]的增量为2,抽取的是索引为0, 2(0+2=2)的元素。注意,不包含终点,即索引4。range(0, 4, 2)生成的整数列表是[0, 2],同样有相似之处。
    (3)假设ns=[10, 20, 30, 40, 50],那么ns[:]生成的子列表是[10, 20, 30, 40, 50],起点省略代表开头(索引0),终点省略代表末尾之后(即最后一个元素之后),增量省略代表增量为1。注意,起点和终点之间的冒号不能省略。
    (4)假设ns=[10, 20, 30, 40, 50],那么ns[-2::-1]生成的子列表是[40, 30, 20, 10]。起点-2是指倒数第2个元素为起点。终点省略代表末尾之后(这里,从右到左,最左边的元素是末尾)。增量-1代表从右到左抽取元素。
    (5)假设ns=[10, 20, 30, 40, 50],那么ns[::-1]生成的子列表是[50, 40, 30, 20, 10]。起点省略是指倒数第1个元素为起点。终点省略代表末尾之后(这里,从右到左,最左边的元素是末尾)。增量-1代表从右到左抽取元素。
  5. 列表切片的写法中,增量为负数的话,就是逆向切片。对于逆向切片,要保证起点大于终点,否则生成的子列表是空列表。例如,ns[-3👎-1]得到空列表。

小结

  1. 本文结合实例讲解了列表切片的写法和含义。学会列表切片操作,会给编程带来诸多便利。
  2. 列表切片的写法有多种变化。无论如何变化,只要确定起点,终点和增量,就可以确定所生成的子列表。