Python高级编程的面试题二

295 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情

1、a,*args, ** kwargs 的区别

首先这三个顺序是肯定不会改的,必须是这个顺序(a,args,* kwargs) a表示一个参数,可以是字符串,也可以是数字,也可以是列表等等, *args表示是一个元组, ** kwargs表示是一个字段

def function(a,*args,**kwargs):
    print(type(a))
    print(type(args))
    print(type(kwargs))

function(1,1,1)

运行上边代码,执行结果会<class 'int'>,<class 'tuple'>,<class 'dict'>显示这三个参数属于那种类型。

def function(a,*args,**kwargs):
    print(type(a))
    print(type(args))
    print(type(kwargs))
    print(a)
    print(args)
    print(kwargs)
function(2,3,4,5,6,c=1,b=2)

此时运行结果:<class 'int'>,<class 'tuple'>,<class 'dict'> 2:表示参数a的值, (3, 4, 5, 6): 表示*args的值 {'c': 1, 'b': 2}:表示** kwargs的值。

2、return和yield的区别

return阻断循环,yield不阻断循环。

def func1():
    for  i  in range(1,5):
        return i  # 阻断循环

def func2():
    for i in range(1,5):
        yield i  # 生成器,不阻断循环,而是把每个结果进行逐一返回
print(func1())
print(func2())

yi = func2()
for i in yi:
    print(i)

此时return就直接返回1,不进行循环了,但是yield会返回一个生成器,不阻断循环,循环的时候,每次都会打印生成器的值,逐一返回。

3、多种推导式实现

根据一个列表创建一个新的列表,用一行代码

lambda表达式的推导式

# 把下边的列表中的所有值都平方得到一个新的列表
list1 = [1,3,4,5,6,2]
result = map(lambda x:x*x ,list1)
print(list(result))

运行结果把result转化成列表形式就是[1, 9, 16, 25, 36, 4]

推导式

# 把下边的列表中的所有值都平方得到一个新的列表
list1 = [1,3,4,5,6,2]
list2 = [i *i for i in list1]
print(list2)

运行结果把result转化成列表形式就是[1, 9, 16, 25, 36, 4]

字典推导式

# 将下边的字典中所有的key,生成一个列表
dict1 = {"key":1,"key2":2,"key3":3}
keys = [key for key,value in dict1.items()]
print(keys)

此时运行结果为['key', 'key2', 'key3'],把字典dict中多有的key生成一个新的列表。

4、冒泡排序

相邻两个数字进行比较,大的向下沉,最后一个元素是最大的。时间复杂度是O(n^2)

list1=[2,3,4,23,23,13,4,1,44,3,245,25,78,588,46]

def bubble_sort(list1):
    for j in range(len(list1)):
        for i in range(j,len(list1)):
            if list1[j]> list1[i]:
                list1[j],list1[i] = list1[i],list1[j]
    return list1
print(bubble_sort(list1))

运行结果为[1, 2, 3, 3, 4, 4, 13, 23, 23, 25, 44, 46, 78, 245, 588]。按照从小到大排序,返回原列表。

5、快速排序

列表中取出第一个元素,作为标准,把比第一个元素小的都放在左侧,把比第一个元素大的都放在右侧。时间复杂度O(nlog2n)

list1=[2,3,4,23,23,13,4,1,44,3,245,25,78,588,46]

def quick_sort(list):
    if list==[]:
        return []
    else:
        frist = list[0]
        # 推导式实现
        less = quick_sort([i for i in list[1:] if i < frist])
        more = quick_sort([m for m in list[1:] if m >= frist])
        return less + [frist]+more
print(quick_sort(list1))

运行结果为[1, 2, 3, 3, 4, 4, 13, 23, 23, 25, 44, 46, 78, 245, 588],将列表list1的第一个元素2取出来,作为一个标准,然后让其他的元素跟2进行对比,比2大的放在右侧,比2小的放在左侧,最后组合到一起,返回给一组个的列表。