Python入门100个实例(33)——用列表推导式来缩短输入代码

从本例学到什么

  1. 列表推导式是什么?怎么写?怎么执行的?
  2. 如何用列表推导式读入一组数?

实例程序

题目描述

涨工资
输入一组工资数据,写入列表。对于小于5000的工资,涨1.5倍。并输出涨后的工资数据。

输入格式:
数据之间空格隔开

输出格式:
涨工资后的数据,空格隔开。尾部 不带空格。

输入样例:
3000 4000 6000 8000 2000.5

输出样例:
4500.0 6000.0 6000 8000 3000.75

上述题目的参考答案

nums = input().split()  #input()读入一行,split()切分成数字字符串,nums的值是数字串列表。
fnums = [float(n) for n in nums]  #把nums列表内的各个元素转换成浮点数,存入fnums列表
results = []  #存储结果
for i in range(len(fnums)):
    if fnums[i] < 5000:
        results.append(str(fnums[i] * 1.5))  #str函数把浮点数转换为字符串
    else:
        results.append(nums[i])  #若为整数,nums[i]字符串中不包含小数点
print(' '.join(results))  
#join是字符串操作方法,作用是把results内的各个字符串组合成一个完整的字符串
#各个字符串之间用空格间隔。

知识点讲解

  1. 列表推导式的写法: [表达式 for 变量 in 列表] 。这里,for和in是固定的写法。
  2. 列表推导式的结果是一个新列表。我们举例说明列表推导式的执行过程。
    对于[i ** 2 for i in range(5)],执行过程是:
    (1)变量 i 取值0, 计算0 ** 2,然后把结果0加入到结果列表尾部。
    (2)变量 i取值1,计算1 ** 2,然后把结果1加入到结果列表尾部。
    (3)变量 i 取值2, 计算2 ** 2, 然后把结果4加入到结果列表尾部。
    (4)变量 i 取值3, 计算3 ** 2, 然后把结果9加入到结果列表尾部。
    (5)变量 i 取值4, 计算4 ** 2, 然后把结果16加入到结果列表尾部。
    (6)[i ** 2 for i in range(5)]的结果是:[0, 1, 4, 9, 16]。
  3. 对于上面的实例程序,假设输入内容是:3000 4000 6000 8000 2000.5,执行语句 nums = input().split()后,nums的值是[‘3000’, ‘4000’, ‘6000’, ‘8000’, ‘2000.5’],接下来执行语句:
fnums = [float(n) for n in nums] 

执行过程是:
(1)变量 n取列表nums的第1个元素,值为’3000’,执行float函数转换为3000.0,加入结果列表尾部。
(2)变量 n取列表nums的第2个元素,值为’4000’,执行float函数转换为4000.0,加入结果列表尾部。
(3)变量 n取列表nums的第3个元素,值为‘6000’,执行float函数转换为6000.0,加入结果列表尾部。
(4)变量 n取列表nums的第4个元素,值为’8000’,执行float函数转换为8000.0,加入结果列表尾部。
(5)变量 n取列表nums的第5个元素,值为’2000.5’,执行float函数转换为2000.5,加入结果列表尾部。
(6)结果列表赋值给fnums。这样,fnums成为结果列表的名字。

  1. 上一节给出的代码中,头两行可以写成一行,即:
fnums = [float(s) for s in input().split()]

这里,把变量s替换为变量n,或者变量ds,或者其他变量名字都是可以的。float(s)是表达式,作用是得到数字字符串s对应的浮点数。
语句的执行步骤是:
(1)执行input(),读入一行。
(2)执行split(),得到数字串列表。
(3)依次遍历数字串列表中的元素s,执行float(s),得到的结果加入到结果列表尾部。

小结

  1. 列表推导式的写法: [表达式 for 变量 in 列表] 。
  2. 列表推导式的结果是一个新列表,我们称之为结果列表。执行过程是:变量依次取<列表>内的元素,执行表达式,得到的结果加入结果列表尾部。
  3. 一行输入中读入一组小数存入列表的写法如:
fnums = [float(s) for s in input().split()]
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值