python基础的一些测试题
主要针对高级函数、匿名函数的训练
第一题
- 求列表中所有数字元素的和;
- 列表中的元素都是整数;
- 列表中的元素可能重复,需要去掉重复元素;
- 需要使用高级函数实现求和;
- 返回计算的结果;
from functools import reduce
def sum_of_list(lt):
print('所有数字元素的和:',sum(lt))
lt = list(set(lt))
return '去掉重复元素后的和:{}'.format(reduce(lambda x, y: x + y, lt))
print(sum_of_list([1,5,8,-9,-9]))
第二题
- 传入一个列表,列表中元素可能是任意类型;
- 使用高级函数完成非字符串元素的删除;
- 然后按照字符串的长度进行降序排序;
- 返回新的排序后的列表;
def sort_list(lt):
lt = list(filter(lambda x: isinstance(x, str), lt))#匿名函数
lt1=sorted(lt,key=lambda i:len(i),reverse=True)
return lt1
lt = ['java', 'c', 'CSS', [99,100] , 0]
print(sort_list(lt))
第三题
- 返回一个字符串中出现次数第二多的单词;
- 字符串中可能有英文单词、标点、空格;
- 字符串中的英文字符全部是小写;
from collections import Counter
import re
def second_count_word(s):
a = re.compile(r'[a-z]+')
lt1 = a.findall(s)
dt = Counter(lt1)
lt2 =dt.most_common(2)
return lt2[1][0]
#第一多是dessert,第二多是noodles
s = 'i want noodles, but tom wants dessert besides noodles. he likes dessert very much because dessert can soothe his mood. '
print(second_count_word(s))
第四题
- 传入年、月、日,返回该日是当年的第几天;
- 返回值是一个整数;
import datetime
def which_day(y, m, d):
dt = datetime.date(y, m, d)
dn = dt.timetuple()
return dn.tm_yday
print(which_day(2018,12,27))
第五题
- 写一个装饰器,查看函数执行的时间;
- 在装饰器中打印执行时间即可;
- 递归函数除外;
import time
def continue_time(func):
def inner(*args):
start = time.time()
func(*args)
end = time.time()
diff_time = end-start
print('执行时间为:',diff_time)
return inner
@continue_time
def func():
sum =0
for i in range(99999):
sum += i
func()
第六题
- 返回列表中最后剩下的元素;
- 传入列表,和步进值(隔几个删除数据);
- 从第一个元素起,查到步进值就删掉该元素;
- 到结尾后,返回第一个元素继续累计查询
def last_item(lt, step):
while len(lt) > 1:
n = step -1
for i in range(n):
m = lt.pop(0)
lt.append(m)
del lt[0]
return lt[0]
lt = [1,2,3,4,5]
print(last_item(lt,3))