文档结构
- 练习题
练习题
1、使用一行代码实现给定列表的奇偶数分离;list_a = [11, 22, 45,17,19,21,76,34,28,59]
答案:此处使用 列表推导式实现;
>>>
>>> list_a = [11, 22, 45,17,19,21,76,34,28,59]
>>> part_js,part_os =[x for x in list_a if x%2==1],[x for x in list_a if x%2==0]
>>> part_js
[11, 45, 17, 19, 21, 59]
>>> part_os
[22, 76, 34, 28]
>>>
2、编写程序,输出给定范围序列内的所有质数;
答案:此处使用 lamda表达式,all()函数以及 filter 函数实现;
start_n = int(input("请输入序列起始值:"))
end_n = int(input("请输入序列终止值:"))
iter_rt = filter(lambda x: all(x % y != 0 for y in range(2, x)), range(start_n, end_n))
list_rt = list(iter_rt)
print(list_rt)
# 结果输出
请输入序列起始值:20
请输入序列终止值:70
[23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67]
Process finished with exit code 0
3、编写程序输出前10个斐波那契数列;
答案:此处使用列表推导式实现;
fibo = [0, 1]
[fibo.append(fibo[-2] + fibo[-1]) for i in range(0,8)]
print(fibo)
# 结果输出
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Process finished with exit code 0
扩展:该题也可以考虑使用递归函数来实现,参数支持2种类型,一种按照序列数来输入,一种按照阈值范围来确定;
实现:按照递归函数和参数名称来赋值;
# coding=utf-8
fibo = [0, 1]
def queryFibo(count=0, stop_n=0):
if count:
if len(fibo) < count:
fibo.append(fibo[-2] + fibo[-1])
return queryFibo(count=count)
else:
return fibo
elif stop_n:
if (fibo[-2] + fibo[-1]) <= stop_n:
fibo.append(fibo[-2] + fibo[-1])
return queryFibo(stop_n=stop_n)
else:
return fibo
queryFibo(count=11)
print(fibo)
queryFibo(stop_n=60)
print(fibo)
# 输出结果
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
Process finished with exit code 0
4、编写程序判断一个数字是否为阿姆斯特朗数(Armstrong),
说明:如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数,如下所示:
扩展:此处可以编码实现输出前固定项的Armstrong 或者在某个范围内符合Armstrong特征的值;
A:定义函数selectArmstrong 实现 Armstrong 值的判断
def selectArmstrong(input_n: int) -> bool:
len_n = len(str(input_n))
split_n = [int(x) ** len_n for x in str(input_n)]
sum_n = sum(split_n)
return True if input_n == sum_n else False
说明:这里使用到了列表推导式、三元表达式、列表求和操作;
B:定义函数 getArmstrong 获取 Armstrong值;要不输入最大边界值,要不输入符合的数据项个数;
def getArmstrong(count=0, start_n=1, stop_n=1):
if count >= 1 and len(list_rt) < count:
if selectArmstrong(start_n):
list_rt.append(start_n)
return getArmstrong(start_n=start_n + 1, count=count)
elif start_n <= stop_n:
if selectArmstrong(start_n):
list_rt.append(start_n)
return getArmstrong(start_n=start_n + 1, stop_n=stop_n)
说明:此处使用递归函数计算符合特殊的数值;
C:定义结果列表和 输出逻辑:
list_rt = list()
getArmstrong(count=12)
print(list_rt)
# 输出结果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371]
Process finished with exit code 0
方法二:使用列表推导式实现,selectArmstrong函数公用;
list_rt = list()
start_n, stop_n = 11, 390
[list_rt.append(x) for x in range(start_n, stop_n) if selectArmstrong(x)]
print(list_rt)
# 结果输出
[153, 370, 371]
Process finished with exit code 0
5、编码实现一行代码展开列表 [[1,2],[3,4],[5,6]],得到新的列表 [1,2,3,4,5,6]?
答案:列表推导式实现:
>>>
>>> list_1=[[1,2],[3,4],[5,6]]
>>> list_2=[j for i in list_1 for j in i]
>>> list_2
[1, 2, 3, 4, 5, 6]
>>>
6、编码实现 str_a = “ajldjlajfdljfddd”,去重并从小到大排序输出"adfjl"?
答案:先将字符串转换为集合,在转换为列表,最好排序;
>>> str_a = "ajldjlajfdljfddd"
>>> list_a=list(set(str_a))
>>> list_a.sort()
>>> str_b="".join(list_a)
>>> str_b
说明:list.sort() 函数没有返回值,所以不能直接将其赋值给另外一个变量;
7、编码实现 字典 dict_a={“name”:“zs”,“age”:18,“city”:“深圳”,“tel”:“1362626627”} 根据键从小到大排序?
方式A:取出键值,排序后赋值给新的字典;
>>>
>>> dict_a={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
>>> dict_new={}
>>> list_a=list(dict.keys())
>>> list_a.sort(reverse=False)
>>> for x in list_b:
... dict_new[x]=dict[x]
...
>>> dict_new
{'age': 18, 'city': '深圳', 'name': 'zs', 'tel': '1362626627'}
方式B:使用内置函数排序生成新的列表
>>> dict_a={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
>>> dict_b={}
>>> list_b=sorted(dict_a.items(),key=lambda i:i[0],reverse=False)
>>> list_b
[('age', 18), ('city', '深圳'), ('name', 'zs'), ('tel', '1362626627')]
>>>
>>> for y in list_b:
... dict_b[y[0]]=y[0]
...
>>>
>>> dict_b
{'age': 18, 'city': '深圳', 'name': 'zs', 'tel': '1362626627'}
>>>
8、编码 list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]?
实现逻辑:递归将原列表最小值赋值给新列表;
list_aa=[22,11,33,55,22,77,99,88]
list_ll=[]
def sortList(var:list):
if len(var)>0:
min_n=min(var)
list_ll.append(min_n)
var.remove(min_n)
sortList(var)
return list_ll
print(sortList(list_aa))
9、代码举例说明如何交换两个数值?
代码实现:
>>>
>>> num_1,num_2=11,22
>>> print(num_1,num_2)
11 22
>>> num_1,num_2=num_2,num_1
>>> print(num_1,num_2)
22 11
>>>
10、代码举例说明如何实现列表去重?
实现方式:先转为集合,再转为列表,代码如下:
>>> list_a=["aaa","bbb","aaa",11,22,33,33]
>>> set_a=set(list_a)
>>> print(set_a)
{33, 11, 22, 'aaa', 'bbb'}
>>> list_b=list(set_a)
>>> print(list_b)
[33, 11, 22, 'aaa', 'bbb']
11、字符串a = “not 404 found 张三 99 深圳”,每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"?
在这里插入代码片
12、x=“abc”,y=“def”,z=[“d”,“e”,“f”],分别求出x.join(y)和x.join(z)返回的结果?
代码实现:
在这里插入代码片