Python 2022年面试题总结_下列选项中,反转字符串“astr”正确的是(

2022年Python面试题

✅作者简介:大家好我是编程ID
📃个人主页:编程ID的csdn博客
系列专栏:Python
💬推荐一款Python编程题刷题神器👉点击跳转进入网站

一. Python基础

在这里插入图片描述

1)字典推导式

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

2)反转字符串 “aStr”

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

3)将字符串 “k:1 |k1:2|k2:3|k3:4”,处理成字典 {k:1,k1:2,…}

str1 = "k:1|k1:2|k2:3|k3:4" 
def str2dict(str1): 
 dict1 = {} 
 for iterms in str1.split('|'): 
  key,value = iterms.split(':') 
  dict1[key] = value 
 return dict1 
#字典推导式 
d = {k:int(v) for t in str1.split("|") for k, v in (t.split(":"), )}

4)下面代码的输出结果将是什么

list = ['a','b','c','d','e'] 
print(list[10:])

代码将输出[],不会产生IndexError错误,就像所期望的那样,尝试用超出成员的个数的index来获取某 个列表的成员。例如,尝试获取list[10]和之后的成员,会导致IndexError。然而,尝试获取列表的切 片,开始的index超过了成员个数不会产生IndexError,而是仅仅返回一个空列表。这成为特别让人恶 心的疑难杂症,因为运行的时候没有错误产生,导致Bug很难被追踪到。

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

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

6)Python元组和列表的区别
答:列表可变,元组不可变。

如果只能回答上面的答案在大厂面试中一定会挂,下面进行详细解答:

元组(tuple)不可变是指它的内存地址不可变,如果元组内的元素是可变类型的值(例如:dict),那其中的元素是可以改变的。例如:

a = (1, {'key': 1})
a[1]['key'] = 2
print('改变之后的a的值', a)

输出结果

改变之后的a的值 (1, {'key': 2})

除此之外,元组占用的内存空间更小:

a = [1, 2, 3, 4, 5, 6]
print('列表的空间大小为:', a.__sizeof__())
b = (1, 2, 3, 4, 5, 6)
print('元组的空间大小为:', b.__sizeof__())

输出结果

列表的空间大小为: 136
元组的空间大小为: 72

元组可以作为字典的key,而列表不能:

列表作为字典的key时会报错!

a = {['a']:1}

输出结果

TypeError: unhashable type: 'list'

元组作为字典的key时则不会报错

a = {('a',):1}

另外,元组的元素必须用逗号分隔,哪怕只有一个元素:

(‘a’,)
元组和列表的区别总结如下:

元组内存地址不可变,列表内存地址可变;
元组占用空间比列表更少;
元组是不可变参数,所以可以作为字段的key,而列表(可变参数)不能;
元组的元素必须用逗号分隔,哪怕只有一个元素;
7)如何在一个函数内部修改全局变量
可以使用global修改:

a = 1

def test():
    globals()['a'] = 2
    
print('原来的a值:', a)
test()
print('修改后的a值:', a)

输出结果

原来的a值: 1
修改后的a值: 2

函数也可以改成这样:

def test():
    global a
    a=2

8)解释一下Python的GIL
GlL是 python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占 python解释器(加了一把锁即GIL),使该进程內的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。多进程中因为每个进程都能被系统分配资源,相当于每个进程有了ー个 python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大。

9)Python列表去重
通过集合的方式去重:

a = [1, 2, 2, 3, 3, 6]
a = set(a)  # 先转为集合进行去重
a = list(a)  # 然后再转换为列表
print('去重后的列表', a)

手写去重代码:

a = [1, 2, 2, 4, 4, 6, 7]
b = []
for i in a:
    if i not in b:
        b.append(i)

print('去重后的列表', b)

10)列出 python中可变数据类型和不可变数据类型,并简述原理
不可变数据类型:数值型(int)、字符串型(str)和元组(tuple)不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址):

a = 3
b = 3
print('a的内存地址为', id(a))
print('b的内存地址为', id(b))

输出结果

a的内存地址为 1658574891376
b的内存地址为 1658574891376

可变数据类型:列表(list)和字典(dict),允许变量的值发生变化,即如果对变量进行 append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象:

a = [1,2]
b = [1,2]
print('a的内存地址为', id(a))
print('b的内存地址为', id(b))

输出结果



### 最后

> **🍅 硬核资料**:关注即可领取PPT模板、简历模板、行业经典书籍PDF。  
> **🍅 技术互助**:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。  
> **🍅 面试题库**:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。  
> **🍅 知识体系**:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值