【实验目标】 1) 熟悉Python列表创建与删除。 2) 熟练掌握Python列表元素增加、删除的方法。
3) 熟练掌握列表推导式,能够使用列表推导式生成符合特定条件的列表。
4) 熟练掌握切片的用法,能够使用切片访问列表元素,能够使用切片为列表增加、删除、修改元素。 5) 熟悉+、*运算符对列表的作用。
6) 理解和熟练运用成员测试运算符in在遍历序列元素。 7) 熟练掌握列表排序方法sort()和内置排序函数sorted()的用法。
8) 熟悉Python元组、字典、集合的创建与删除。 9) 熟练掌握生成器推导式用法。
10) 理解和熟练运用成员测试运算符in在遍历序列元素。 11) 掌握序列解包的用法。 【学习重点】
使用range对象创建列表、列表元素访问、列表推导式、列表切片。
元组创建与访问、生成器推导式、字典的get()方法、集合运算、序列解包。
1、给出一个包含若干整数的列表[23,16,18,19,76,121,33,57,80],输出一个新列表,要求新列表中只包含原列表中的偶数。提示:可以使用list、filter、lambda函数完成。
lst = [23,22,14,11,33,44,78,47]
print(list(filter(lambda x:x%2==0,lst))) #第一个参数为函数时,将第二个参数中每一个元素代入函数进行运算,把返回Ture的值并成一个列表
2、给出一个包含若干整数的列表[23,16,18,19,76,121,33,57,80],输出列表中的所有整数连乘的结果。提示:可以使用reduce、lambda函数完成。
from functools import reduce
lst=[23,16,18,19,76,121,33,57,80]
print(reduce(lambda x,y:x*y,lst))
3、列表切片(教材习题3.5)
编写程序,用户输入一个列表和两个整数作为下标,然后用切片获取并输出介入两个下标之间的元素组成的子列表。例如,用户输入[1,2,3,4,5,6]和2,5后,程序输出[3,4,5,6]。
x = input('please input a list:')
x = eval(x)
start,end = eval(input('please input the start and the end positions:'))
print(x[start:end+1])
4、单词长度(crr23)
输入一句英文句子,例如:the scenery along the should be and the mood at the view,输出其中最长的单词及长度。
sen = input("请输入一句英文:")
words = sen.split()
#将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中
#(不包含分隔符),作为方法的返回值反馈回来。
length = [len(word) for word in words]
maxlen = max(length)
print("最长单词{} 有{}字母".format(words[length.index(maxlen)],maxlen))
#格式化输出
5、餐厅下午茶 (列表与元组 crr66)
某餐厅推出了优惠下午茶套餐活动。顾客可以以优惠的价格从给定的糕点和给定的饮料中各选一款组成套餐。已知,指定的糕点包括松饼(Muffins)、提拉米苏(Tiramisu)、芝士蛋糕(Cheese Cake)和三明治(Sandwich);指定的饮料包括红茶(Black tea,)、咖啡(Coffee)和橙汁(Orange Juice)。请问,可以搭配出哪些套餐供客户选择?请依次打印输出各种套餐。
snacks = ['Muffins','Tiramisu','Cheese Cake','Sandwich']
drinks = ['Black tea','Coffee','Orange Juice']
menus = []
for snack in snacks:
for drink in drinks:
menu = (snack,drink)
menus.append(menu)
for menu in menus:
print(menu)
6、生成1000个0~100之间的随机整数,采用集合统计每个元素的出现次数。
import random
x = [random.randint(0,1000) for i in range(1000)]
s = set(x)#集合
for v in s:
print(v,':',x.count(v))
print('='*30)
7、高考录取率(列表与元组crr39)
根据十年高考录取率表创建列表,并完成如下操作:
① 计算十年平均录取率。
② 找出录取率最高的年份。
表1 十年高考录取率表
年份 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
录取率 57% 56% 57% 62% 69% 72% 75% 76% 74.3% 74%
rate_years = [(2006,57),(2007,56),(2008,57),(2009,62),(2010,69),(2001,72),(2012,75),(2013,76),(2014,74.3),(2015,74)]
rates = [item[1] for item in rate_years]
avg = sum(rates)/len(rates)
print("平均录取率 {:.2f}%".format(avg))
topYear = rate_years[rates.index(max(rates))]
print("录取率最高的年份 {},录取率 {}%.".format(topYear[0],topYear[1]))
8、输入两个分别包含若干整数的列表lstA和lstB,输出一个字典,要求使用列表lstA中的元素作为键,列表lstB中元素作为值,并且最终字典中的元素数量取决于lstA和lstB中元素最少的列表的数量。
lstA = input('请输入一个包含若干整数的列表lstA:')
lstB = input('输入一个包若干整数的列表lstB:')
result = dict(zip(lstA,lstB))
print(result)
9、输入一个字符串,输出其中出现次数最多的字符及其出现的次数。要求使用字典完成。
data = input('输入一个字符串')
d = dict()
for ch in data:
d[ch] = d.get(ch,0)+1
mostCommon = max(d.items(),key = lambda item:item[1])
print(mostCommon)
10、籍贯分布(字典的整体操作crr92)
小夏和小迪接到一个调研任务,需要按省份统计班级同学的籍贯分布情况。他们决定两人分头统计男生和女生的籍贯分布,最后再汇总结果。
已知小夏统计的女生籍贯分布是:dicGirls={‘Jiangsu’:3,‘Zhejiang’:2,‘Jilin’:1} ;小迪统计的男生籍贯分布是:dicBoys={‘Jiangsu’:8,‘Zhejiang’:5,‘Shandong’:5,‘Anhui’:4,‘Fujian’:2}。请编写程序将两人的调研结果合并而且输出。
dicGirls = {'Jiangsu':3,'Zhejiang':2,'Jilin':1}
dicBoys = {'Jiangsu':8,'Zhejiang':5,'Shandong':5,'Anhui':4,'Fujian':2}
dic = dicBoys.copy()
for k,v in dicGirls.items():
dic[k] = dic.get(k,0)+v
print(dic)
11、输入一个包含若干整数的列表,输出新列表,要求新列表中的所有元素来自于输入的列表,并且降序排列。
lst = input('输入一个包含若干整数的列表lst:')
print(sorted(lst,reverse=True))
12、输入两个集合 setA 和 setB,分别输出它们的交集、并集和差集 setA-setB。
setA = eval(input('请输入一个集合:'))
setB = eval(input('请输入一个集合:'))
print('交集:',setA&setB)
print('并集:',setA|setB)
print('setA-setB:',setA-setB)