今天的面试题以基础为主, 去面试 Python 工程师, 这几个基础问题不能答错
第 1 题: 列表和元组有什么不同?
列表和元组是 Python 中最常用的两种数据结构, 字典是第三种.
相同点:
都是序列
都可以存储任何数据类型
可以通过索引访问
语法差异
使用方括号 [] 创建列表, 而使用括号 () 创建元组.
是否可变
列表是可变的, 而元组是不可变的, 这标志着两者之间的关键差异.
重用与拷贝
元组无法复制. 因为元组是不可变的, 所以运行 tuple(tuple_name)将返回自己
内存开销
Python 将低开销的较大的块分配给元组, 因为它们是不可变的.
列表则分配小内存块.
与列表相比, 元组的内存更小. '
当你拥有大量元素时, 元组比列表快.
列表的长度是可变的.
第 2 题: 什么是负索引?
Python 中的序列索引可以是正也可以是负
如果是正索引, 0 是序列中的第一个索引, 1 是第二个索引.
如果是负索引,-1 是最后一个索引,-2 是倒数第二个索引.
lst=[11,22,33,44,55]
全取列表
- >>> lst[:]
- [11, 22, 33, 44, 55]
取不到最后一个元素
- >>> lst[:-1] # 注意这里不能输出 55, 因为切片操作都是左闭右开的
- [11, 22, 33, 44]
列表倒序
- >>> lst[::-1]
- [55, 44, 33, 22, 11]
取最后一个
>>> lst[-1] 55
取第一个
>>> lst[0] 11
第 3 题: 如何随机打乱列表中元素, 要求不引用额外的内存空间?
用 random 包中的 shuffle() 函数来实现
- import random
- random.shuffle(你的列表)
- # 举个例子:
- L1 = [1, 3, 5, 7]
- random.shuffle(L1)
第 4 题: 解释 Python 中的 join() 和 split() 函数?
join() 函数可以将指定的字符添加到字符串中
- '1,2,3,4,5'
- a=','.join('123456')
- print(a)
- print(type(a))
- #1,2,3,4,5,6
- #<class 'str'>
split() 函数可以用指定的字符分割字符串
- ['1', '2', '3', '4', '5']
- a='1,2,3,4,5,6'.split(',')
- print(a)
- print(type(a))
- #['1', '2', '3', '4', '5', '6']
- #<class 'list'>
第 5 题: 如何删除字符串中的前置空格?
strip(): 把头和尾的空格去掉
lstrip(): 把左边的空格去掉
rstrip(): 把右边的空格去掉
replace('c1','c2'): 把字符串里的 c1 替换成 c2. 故可以用 replace('','')来去掉字符串里的所有空格
split(): 通过指定分隔符对字符串进行切片, 如果参数 num 有指定值, 则仅分隔 num 个子字符串
re.split(r'\s+', 'a b c') # 使用正则表达式
第 6 题: Python 中的 pass 语句有什么作用?
在编写代码时只写框架思路, 具体实现还未编写就可以用 pass 进行占位, 使程序不报错, 不会进行任何操作.
比如:
- while False:
- pass
pass 通常用来创建一个最简单的类:
- class MyEmptyClass:
- pass
pass 在软件设计阶段也经常用来作为 TODO, 提醒实现相应的实现, 比如:
- def readtxt(*args):
- pass # to do list
第 7 题: 解释 Python 中的成员运算符?
成员运算符
in 是判断是否包含
通过成员运算符'in' 和'not in', 确认一个值是否是另一个值的成员.
- print('me' in 'disappointment')#True
- print('us' in 'disappointment')#False
身份运算符
is 是判断内存地址
is 是判断两个标识符是不是引用自一个对象
is not 是判断两个标识符是不是引用自不同对象
tops: in 的 not 在前, is 的 not 在后
微信搜索: 非本科程序员, 关注吧
来源: https://www.cnblogs.com/happymeng/p/10836414.html