从本例学到什么
- 列表推导式用于输入整数列表。
- 列表推导式用于转换列表中各个元素的数据类型。
实例程序
题目描述
将数组中的数逆序存放
本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。
输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。
输入样例:
4
10 8 1 2
输出样例:
2 1 8 10
上述题目的参考答案
n = int(input())
ns = [int(s) for s in input().split()] #用列表推导式读入整数列表
ns_str = [str(ri) for ri in ns[::-1]] #用列表推导式把整数列表转换为字符串列表
print(' '.join(ns_str)) #调用字符串对象的join方法,合并字符串列表,列表元素之间用空格间隔
知识点讲解
- 列表推导式的写法: [表达式 for 变量 in 列表] 。这里,for和in是固定不变的。
- 上一节给出的代码中的第2行的执行过程是:
(1)执行input()读入一行内容。
(2)执行split()方法,作用是以空格作为分割符,把读入的一行内容切分成多个数字串,生成数字串列表。把数字串列表记作n_strs。至此,第2行代码等同于: ns = [int(s) for s in n_strs] 。
(3)执行列表推导式[int(s) for s in n_strs],生成结果列表。以上一节给出的输入样例为例,具体的步骤是:
(3-1) 变量s赋值为n_strs的第1个元素,即’10’,接着执行int(‘10’),得到整数10,加入结果列表。一开始,结果列表为空列表。"(3-1)"这一步执行后,结果列表为[10]。
(3-2)变量s赋值为n_strs的第2个元素,即’8’,接着执行int(‘8’),得到整数8,加入结果列表。这一步执行后,结果列表为[10, 8]。
(3-3)变量s赋值为n_strs的第3个元素,即’1’,接着执行int(‘1’),得到整数1,加入结果列表。这一步执行后,结果列表为[10, 8, 1]。
(3-4)变量s赋值为n_strs的第4个元素,即’2’,接着执行int(‘2’),得到整数2,加入结果列表。这一步执行后,结果列表为[10, 8, 1, 2]。
(4)结果列表赋值给ns。 - 上一节给出的代码中的第3行的执行过程是:
(1)执行ns[::-1],得到列表ns的逆序列表r_ns。于是,第3行代码等同于:ns_str=[str(ri) for ri in r_ns] 。
(2)执行列表推导式[str(ri) for ri in r_ns],生成结果列表。以r_ns为[2, 1, 8, 10]为例,具体步骤是:
(2-1)变量ri赋值为r_ns的第1个元素,即2,接着执行str(2),得到字符串’2’,加入结果列表。一开始,结果列表为空列表。这一步执行后,结果列表为[‘2’]。
(2-2)变量ri赋值为r_ns的第2个元素,即1,接着执行str(1),得到字符串’1’,加入结果列表。这一步执行后,结果列表为[‘2’, ‘1’]。
(2-3)变量ri赋值为r_ns的第3个元素,即8,接着执行str(8),得到字符串’8’,加入结果列表。这一步执行后,结果列表为[‘2’, ‘1’, ‘8’]。
(2-4)变量ri赋值为r_ns的第4个元素,即10,接着执行str(10),得到字符串’10’,加入结果列表。这一步执行后,结果列表为[‘2’, ‘1’, ‘8’, ‘10’]。
(3)结果列表赋值给ns_str。 - 把整数列表转换为字符串列表的原由是,字符串的join方法要求参数是字符串列表。’ ‘.join(字符串列表) 的作用是把字符串列表内的元素合并成一个字符串,元素之间用空格间隔。如果是’#’.join(字符串列表),那么元素之间用#号间隔。
小结
- 从一个列表导出另一个列表,通常可以运用列表推导式。
- 从写法和执行过程两方面来理解列表推导式。平时多运用,就会彻底掌握了。
- 列表推导式缩短代码的利器。