”’
11、编写函数:随机产生包含 n 个整数的列表,返回一个元组,其中第一个元素为所
有参数的平均值,其他元素为所有参数中大于平均值的整数。
例如: 随机产生长度为 3 的列表[2, 1, 3],输出为(2.0, 3)
”’
import random
n = int(input(‘请输入n的值’))
lst=[random.randint(1,50) for i in range (n)]
print(lst)
average=int(sum(lst)/len(lst))
alst=[average]
for i in lst:
if i>average:
alst.append(n)
print(alst)
”’
11、编写函数:随机产生包含 n 个整数的列表,返回一个元组,其中第一个元素为所
有参数的平均值,其他元素为所有参数中大于平均值的整数。
例如: 随机产生长度为 3 的列表[2, 1, 3],输出为(2.0, 3)
”’
import random
n = int(input(‘请输入n的值’))
lst=[random.randint(1,50) for i in range (n)]
print(lst)
average=int(sum(lst)/len(lst))
alst=[average]
for i in lst:
if i>average:
alst.append(n)
print(alst)
”’
13、查找两个字符串首尾交叉的最大子串长度,连接两个字符串,首尾交叉部分只保留
一份。例如,1234 和 2347 连接为 12347
要求:程序中使用 lambda 函数
”’
def check(str1, str2):
length1 = len(str1)
length = min(length1, len(str2))
k = max(range(0, length+1), key=lambda i: i if str1[length1-i:] == str2[:i]else False)
return(k,str1+str2[k:]) # k为重复字符的个数(两个字符串首尾交叉的最大子串长度)
str1 = ‘1234’
str2 = ‘2347’
print(str1, str2)
print(check(str1, str2))
”’
输出结果为:
1234 2347
(3, ‘12347’)
”’
”’
14、写一个删除列表中重复元素的函数,要求去重后元素相对位置保持不变
”’
l1 = [1, 7, 7, 8, 5, 5, 4]
print(l1)
”’
使用集合方法一:
l2 = list(set(l1))
l2.sort(key=l1.index)
print(l2)
使用集合方法二:
def dedup(items):
no_dup_items = []
seen = set()
for item in items:
if item not in seen:
no_dup_items.append(item)
seen.add(item)
return no_dup_items
”’
def dedup(items):
no_dup_items = []
for item in items:
if item not in no_dup_items:
no_dup_items.append(item)
return no_dup_items
print(dedup(l1))
”’
15、编写函数,计算传入函数的字符串中,数字、字母、空格以及其他字符的个数,
并返回结果
”’
def func(s:str):
dic={‘digit’:0,’word’:0,’space’:0,’other’:0}
for item in s:
if item.isdigit():
dic[‘digit’]+=1
elif item.isalpha():
dic[‘word’]+=1
elif item.isspace():
dic[‘space’]+=1
else:
dic[‘other’]+=1
return dic
print(func(‘H F U T 5 2 1 .’))
“””
列表推导式
字典
“””
”’
第一题
”’
”’
16、列表推导式与字典的应用
(1).问题描述:编写程序,先生成包含 1000 个随机字符的字符串,然后统计每个字
符出现的次数。;
(2).问题描述:编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序
后按逗号分隔的序列打印单词。假设向程序提供以下输入:
without,hello,bag,world
则输出为:
bag,hello,without,world”’
import random
import string
base = string.printable
x = string.ascii_letters + string.digits + string.punctuation
”’ 所有字母 所有数字 所有标点符号”’
y = [random.choice(x) for i in range(1000)] # 每次从x中随机取出一个元素
z = “”.join(y) # 使用join函数将取出的数据连接成字符串
print(z)
# 重点:循环遍历将取出的字符作为key保存到字典,每个字符出现的次数作为value
# 这里要明白“字典.get(参数1,参数2)”所表达的是什么意思
# ->参数1表示:key值,
# ->参数2:如果指定键的值不存在时,返回该默认值(参数2)
new_dict = dict()
for a in z:
new_dict[a] = new_dict.get(a, 0) + 1
print(new_dict)
”’
第二题
”’
word = sorted(list(set(input(‘请输入逗号分隔的单词序列’).split(‘,’))))
print(‘,’.join(word))
”’
集合的应用
”’
”’
第一题
”’
”’
17、集合的应用
(1).问题描述:编写程序,输入两个集合 setA 与 setB,分别输出它们两个交集的交、
差、并。
(2).编写一个程序,接受一系列空格分隔的单词作为输入,然后删除所有重复的单词
并按字母数字排序后打印这些单词。
”’
setA = {1,2,3,4}
setB = {4,5,6,7}
jiao=str(setA.intersection(setB))
bing=str(setA.union(setB))
cha=str(setA.difference(setB))
print(‘集合A:’+str(setA)+’集合B:’+str(setB))
print(‘交集’+jiao)
print(‘并集’+bing)
print(‘差集’+cha)
”’
第二题
”’
# 方法一
word = input(‘请输入单词(空格隔开):’).split()
for i in word:
if word.count(i) > 1:
word.remove(i)
word.sort()
print(word)
# 方法二
word = input(‘请输入单词(空格隔开):’).split()
[word.remove(i) for i in word if word.count(i) > 1]
word.sort()
print(word)
# 方法三
word = sorted(list(set(input(‘请输入单词(空格隔开):’).split())))
print(word)
# 方法四
str1 = input(‘请输入单词(空格隔开):’).split()
li = []
for i in str1:
if i not in li:
li.append(i)
print(‘ ‘.join(sorted(li)))
”’
18、字符串与列表推导式的应用
问题描述: 编写程序,生成含有 n 个元素的嵌套列表,即列表的每个元素仍是列表,
要求列表中的元素是长度不超过 m 的数字或字符组成的字符串,并按照字符串长度降序输
出结果。
”’
import string
import random
ch = string.digits + string.ascii_letters#digits是生成所有数字从0-9,ascii_letterss是生成字母从a-z,A-Z
n , m=10, 10
a = [[”.join(random.sample(ch,random.randint(1,m)))] for i in range(n)]#random.sample是从序列中选N个随机且不重复的元素
print(sorted(a,key=lambda x: len(x[0]), reverse= True))#lambda表达式,得到字符串长度之后根据长度进行排序
”’
列表与切片的应用
”’
”’
19、列表与切片的应用
问题描述:编写程序,生成一个整型列表,输出包含原列表中所有元素的新列表、包含
原列表中所有元素的逆序列表,以及输出具有偶数位置的元素列表。
”’
import random
lst=[random.randint(1,10) for i in range (10)]
lst2 = lst[::-1]
lst3 = lst[::2]
print(lst)
print(lst2)
print(lst3)
”’
元组的应用
生成器推导式
从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象。
我们可以通过生成器对象,转化成列表或者元组。
也可以使用生成器对象的__next__()方法进行遍历,或者直接作为迭代器对象来使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。
”’
”’
20、元组的应用
问题描述:编写程序,利用生成器推导式生成包含 n 个整数元素的元组,每个元素值不
大于 m,并过滤掉偶数整数,并输出。
”’
import random
def func(n,m):
t=tuple([random.randint(1,m)for i in range(n)])
print(‘过滤前:’,t)
print(‘过滤后:’,tuple(filter(lambda x:x%2!=0,t)))
func(5,10)