使用列表推导式可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表。列表推导式通常有以下几种常用的语法格式:
(1)生成指定范围的数值列表,语法格式如下:
list=[Expression for var in range]
list:表示生成的列表名称
Expression:表达式,用于计算新列表的元素
var:循环变量
range:采用range()函数生成range对象
比如:
import random
list=[random.randint(10,100) for i in range(10)]
print("生成的随机数列表为:",list)
(2)根据列表生成指定需求的列表,语法格式如下:
newlist=[Expression for var in list]
newlist:表示新生成的列表名称
Expression:表达式,用于计算新列表的元素
var:变量,值为后面列表的每个元素值
list:用于生成新列表的原列表
例如:定义一个记录商品价格的列表,然后应用列表推导式生成一个将全部商品价格打五折的列表
list=[12.8,53.6,23.15,45.69]
newlist=[i*0.5 for i in list]
print('原价为:',list)
print('打五折后价格为:',newlist)
(3)从列表中选择符合条件的元素组成新的列表,语法格式如下:
newlist=[Expression for var in list if condition]
newlist:表示新生成的列表名称
Expression:表达式,用于计算新列表的元素
var:变量,值为后面列表的每个元素值
list:用于生成新列表的原列表
condition:条件表达式,用于指定筛选条件
例如:定义一个记录商品价格的列表,然后应用列表推导式生成一个商品价格高于5000的列表
list=[1289,5896,6578,12345,8796,456]
newlist=[x for x in list if x>5000]
print('原列表为:',list)
print('大于五千的列表为:',newlist)
然后我们可以看一下下面的几个程序代码,看大家是否能看懂:
#一行代码输出数字1-10
print(' '.join([str(i) for i in range(1,11)]))
#一行代码输出数字1-100的和
print(sum([i for i in range(1,101)]))
#一行代码输出所有大写字母
print([chr(i) for i in range(65,91)])
#一行代码输出所有小写字母
print([chr(i) for i in range(97,123)])
相信大家很多人都看不懂第一种是怎么实现的吧,当然今天我也主要是说明第一种的实现
str.join(iterable) | 返回一个新字符串,由组合数据类型iterable变量的每个元素组成,元素间用str分割 str='ni hao‘str.join('123') '1ni hao2ni hao3‘ str='-‘ str.join(('a','b','c')) 'a-b-c' fruit=['apple','peach','banana','pear'] sep=',' sep.join(fruit) 'apple,peach,banana,pear' ':'.join(fruit) 'apple:peach:banana:pear' ''.join(fruit) 'applepeachbananapear' |
str.split(sep=None, maxsplit=-1) | 返回一个列表,由str根据sep被分割的部分构成,默认分隔符为空白字符(包括空格、换行符、制表符等),maxsplit参数为最大分割次数 'h-e-l-l-o'.split(sep='-') ['h', 'e', 'l', 'l', 'o'] 'h-e-l-l-o'.split('-',2) ['h', 'e', 'l-l-o'] 'hello hello he j h'.split('e') ['h', 'llo h', 'llo h', ' j h'] txt = "Google#Runoob#Taobao#Facebook“ txt.split("#", 1) ['Google', 'Runoob#Taobao#Facebook'] str='he\tl\tl\to' str.split() ['he', 'l', 'l', 'o'] str='wor\nld' str.split() ['wor', 'ld'] |
上面就是具体的实现和答案,我就不在过多的打这代码了,相信大家应该都能看懂。
下面给出一个例题:(看大家能否实现此题)
某市计划举行一场“畅想明天”歌咏比赛,需要编写一个歌手打分程序,输入7名评委的打分(0-10分),去掉一个最低分,去掉一个最高分,输出该选手的得分(平均分)
print('畅想明天歌咏比赛打分程序'.center(30))
print('='*40)
score=[]
date=input('请输入7名裁判的打分,用英文逗号间隔分数:')
score=date.split(',')
print(score)
print('去掉一个最低分:',str(min(score)))
print('去掉一个最高分:',str(max(score)))
score.remove(min(score))
score.remove(max(score))
digit=[float(i) for i in score]
avg=sum(digit)/len(digit)
print('选手得分为:{}'.format(avg))