python基础面试题31-40

写一个列表生成式,产生一个公差为11的等差数列

print([x*11 for x in range(10)])

给定两个列表,怎么找出他们相同的元素和不同的元素?

list1 = [1,2,3]
list2 = [3,4,5]
set1 = set(list1)
set2 = set(list2)
print(set1&set2)
print(set1^set2)

请写出一段Python代码实现删除一个list里面的重复元素?

比较容易记忆的是用内置的set:

l1 = ['b','c','d','b','c','a','a']
l2 = list(set(l1))

如果想要保持他们原来的排序:
用list类的sort方法:

l1 = ['b','c','d','b','c','a','a']
l2 = list(set(l1))
l2.sort(key=l1.index)
print(l2)

也可以这样写:

l1 = ['b','c','d','b','c','a','a']
l2 = sorted(set(l1),key=l1.index)
print(l2)

也可以用遍历:

l1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a']
l2 = []
for i in l1:
	if not i in l2:
	l2.append(i)
print(l2)

下面这段代码的输出结果是什么?请解释?

def extendlist(val, list=[]):
	list.append(val)
	return list
list1 = extendlist(10)
list2 = extendlist(123, []
list3 = extendlist('a')
print("list1 = %s" %list1)
print("list2 = %s" %list2)
print("list3 = %s" %list3)
# 输出结果:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

新的默认列表只在函数被定义的那一刻创建一次。当extendList被没有指定特定参数list调用时,这组list的值
随后将被使用。这是因为带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。

将以下3 个函数按照执行效率高低排序

def f1(lIn):
	l1 = sorted(lIn)
    l2 = [i for i in l1 if i<0.5]
    return [i*i for i in l2]
def f2(lIn):
    l1 = [i for i in l1 if i<0.5]
    l2 = sorted(l1)
    return [i*i for i in l2]
def f3(lIn):
    l1 = [i*i for i in lIn]
    l2 = sorted(l1)
    return [i for i in l1 if i<(0.5*0.5)]

按执行效率从高到低排列:f2、f1和f3。
要证明这个答案是正确的,你应该知道如何分析自己代码的性能。
Python中有一个很好的程序分析包,可以满足这个需求。

import random
import cProfile
lIn = [random.random() for i in range(100000)]
cProfile.run('f1(lIn)')
cProfile.run('f2(lIn)')
cProfile.run('f3(lIn)')

有一个list["This","is","a","Boy","!"],所有元素都是字符串,对他进行大小写 无关的排序

l1 = ['This','is','a','Boy','!']
print(sorted(l1))

列举字符串、列表、元组、字典每个常用的5个方法?

# 字符串:repleace,strip,split,reverse,upper,lower,join.....

# 列表:append,pop,insert,remove,sort,count,index.....

# 元组:index,count,len(),dir()

# 字典:get,keys,values,pop,popitems,clear,update,items.....

什么是反射?以及应用场景?

'''
在绝大多数语言当中都有反射机制的存在, 可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python中一切皆对象,都可以使用反射

1)、反射机制是很多框架的基石。
2)、反射机制避免了大量的if,else
'''

简述Python的深浅拷贝?

'''
copy():浅copy,浅拷贝指仅仅拷贝数据集合的第一层数据

deepcopy():深copy,深拷贝指拷贝数据集合的所有层
'''

Python 垃圾回收机制?

'''
垃圾回收机制是自动帮助我们管理内存,清理垃圾的一种工具

1)、引用计数
当一个对象的引用被创建或者复制时,对象的引用计数加1;
当一个对象的引用被销毁时,对象的引用计数减1;
当对象的引用计数减少为0时,就意味着对象已经没有被任何人使用了,可以将其所占用的内存释放了。

优点:

简单、直观
实时性,只要没有了引用就释放资源。
缺点:

维护引用计数需要消耗一定的资源
循环应用时,无法回收。也正是因为这个原因,才需要通过标记-清理和分代收集机制来辅助引用计数机制。

2)、标记-清除
“标记-清除”不改动真实的引用计数,而是将
集合中对象的引用计数复制一份副本,改动该对象引用的副本。对于副
本做任何的改动,都不会影响到对象生命走起的维护。

3)、分代回收
将系统中的所有内存块根据其存活时间划分为不同的集合,
每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。
也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。
那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,
如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。
'''
posted @ 2019-12-11 21:13  極9527  阅读(303)  评论(0编辑  收藏  举报