python中astr是啥_python面试准备练习题21-40

目录:

21.字典和json的区别

22.什么是可变、不可变类型

23.存入字典里的数据有没有先后排序

24.字典推导式

25.描述下dict的item()方法与iteritems()的不同

26.请反转字符串“aStr”

27.请按list1中元素的age由大到小排序

28.常用的字符串格式化哪几种

29.简述字符串驻留机制

30.下面代码的输出结果将是什么?

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

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

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

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

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

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

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

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

39.简述Python的深浅拷贝

40.Python 垃圾回收机制

21.字典和json的区别

字典是一种数据结构,json是一种数据的表现形式,字典的key值只要是能hash的就行,json的必须是字符串。

22.什么是可变、不可变类型

可变不可变指的是内存中的值是否可以被改变

不可变类型指的是对象所在内存块里面的值不可以改变,有数字、字符串、元组

可变类型则是可以改变,主要有列表、字典等

23.存入字典里的数据有没有先后排序?

存入的数据不会自动排序,可以使用sort函数对字典进行排序

24.字典推导式

dict = {key: value for (key, value) in iterable}

25.描述下dict的item()方法与iteritems()的不同

字典的items方法作用:是可以将字典中的所有项,以列表方式返回。因为字典是无序的,所以用items方法返回字典的所有项,也是没有顺序的。

字典的iteritems方法作用:与items方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器。

在Python2.x中,iteritems() 用于返回本身字典列表操作后的迭代器【Returns an iterator on all items(key/value pairs) 】,不占用额外的内存。

在Python 3.x 里面,iteritems()方法已经废除了。在3.x里用 items()替换iteritems() ,可以用于 for 来循环遍历。

回到目录

26.请反转字符串“aStr”

print("aStr"[::-1])

27.请按list1中元素的age由大到小排序

In [3]: list1 = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]

In [4]: sorted(list1, key=lambda x: x['age'])

Out[4]: [{'name': 'a', 'age': 20}, {'name': 'c', 'age': 25}, {'name': 'b', 'age': 30}]

In [5]: sorted(list1, key=lambda x: x['age'],reverse=True)

Out[5]: [{'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}, {'name': 'a', 'age': 20}]

28.常用的字符串格式化哪几种

name = '张三'

1)占位符

s1 = "%s DSB 你好" % name

2)format

s2 = '{} DSB 你好'.format(name)

3)f-string(python3.6之后才有的特性)

s3 = f'{name} DSB 你好'

29.简述字符串驻留机制

对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副

本。长字符串不遵守驻留机制。

驻留适用范围: 由数字,字符和下划线(_)组成的python标识符以及整数[-5,256]。

30.下面代码的输出结果将是什么?

list = ['a', 'b', 'c', 'd', 'e']

print(list[10:])

下面的代码将输出[],不会产生IndexError错误。就像所期望的那样,尝试用超出成员的个数的index

来获取某个列表的成员。例如,尝试获取list[10]和之后的成员,会导致IndexError。

回到目录

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

In [6]: [i*11 for i in range(10)]

Out[6]: [0, 11, 22, 33, 44, 55, 66, 77, 88, 99]

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

In [7]: list1 = [1,2,3]

In [8]: list2 = [3,4,5]

In [9]: print(set(list1)&set(list2))

{3}

In [10]: print(set(list1)^set(list2))

{1, 2, 4, 5}

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

# 最简单的

In [12]: list1 = [1, 3, 5, 6, 2, 6, 2, 1]

In [13]: print(list(set(list1)))

[1, 2, 3, 5, 6]

# 需要字母排序的

In [14]: list2 = ['a', 'b', 'c', 'd', 'b', 'c', 'a']

In [19]: list1 = list(set(list2))

In [20]: sorted(list1)

Out[20]: ['a', 'b', 'c', 'd']

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

1 def extendlist(val, list1=[]):

2 list1.append(val)

3 return list1

4 list1 = extendlist(10)

5 list2 = extendlist(123, [])

6 list3 = extendlist('a')

7 print("list1 = %s" % list1)

8 print("list2 = %s" % list2)

9 print("list3 = %s" % list3)

list1 = [10, 'a']

list2 = [123]

list3 = [10, 'a']

新的默认列表只在函数被定义的那一刻创建一次。当extendList被没有指定特定参数list调用时,这组list的值

随后将被使用。这是因为带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。

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

# 可以使用cprofile来分析执行效率

1 def f1(lIn):

2 l1 = sorted(lIn)

3 l2 = [i for i in l1 if i<0.5]

4 return [i*i for i in l2]

5 def f2(lIn):

6 l1 = [i for i in lIn if i<0.5]

7 l2 = sorted(l1)

8 return [i*i for i in l2]

9 def f3(lIn):

10 l1 = [i*i for i in lIn]

11 l2 = sorted(l1)

12 return [i for i in l1 if i

13

14 import random

15 import cProfile

16 lIn = [random.random() for i in range(100000)]

17 cProfile.run('f1(lIn)')

18 cProfile.run('f2(lIn)')

19 cProfile.run('f3(lIn)')

回到目录

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

In [3]: list1 = ["This","is","a","Boy","!"]

In [4]: sorted(list1)

Out[4]: ['!', 'Boy', 'This', 'a', 'is']

37.列举字符串、列表、元组、字典每个常用的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.....

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

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

#python中涉及四个内置函数

# hasattr

# getattr

# setattr

# delattr

1. 可以获取模块的属性

2. 框架中使用

39.简述Python的深浅拷贝

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

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

参考:Python 中的深浅复制

40.Python 垃圾回收机制

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

1)、引用计数

当一个对象的引用被创建或者复制时,对象的引用计数加1;

当一个对象的引用被销毁时,对象的引用计数减1;

当对象的引用计数减少为0时,就意味着对象已经没有被任何人使用了,可以将其所占用的内存释放了。

优点:

简单、直观

实时性,只要没有了引用就释放资源。

缺点:

维护引用计数需要消耗一定的资源

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

2)、标记-清除

“标记-清除”不改动真实的引用计数,而是将

集合中对象的引用计数复制一份副本,改动该对象引用的副本。对于副

本做任何的改动,都不会影响到对象生命走起的维护。

3)、分代回收

将系统中的所有内存块根据其存活时间划分为不同的集合,

每一个集合就成为一个“代”,垃圾收集的频率随着“代”的存活时间的增大而减小。

也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。

那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,

如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

回到目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值