Python面试题大全(一),阿里腾讯PDD等大厂Python面试真题

b. 字符串 str、 列表 list、 元祖 tuple

c. 字典 dict 、 集合 set

d. Python3 中没有 long,只有无限精度的 int

17.python如何实现单例模式?请写出两种实现方式?

第一种方法:使用装饰器

def singleton(cls):

instances = {}

def wrapper(*args, **kwargs):

if cls not in instances:

instances[cls] = cls(*args, **kwargs)

return instances[cls]

return wrapper

@singleton

class Foo(object):

pass

foo1 = Foo()

foo2 = Foo()

print(foo1 is foo2) # True

第二种方法:使用基类 New 是真正创建实例对象的方法,所以重写基类的new 方法,以此保证创建对象的时候只生成一个实例

class Singleton(object):

def new(cls, *args, **kwargs):

if not hasattr(cls, ‘_instance’):

cls._instance = super(Singleton, cls).new(cls, *args, **kwargs)

return cls._instance

class Foo(Singleton):

pass

foo1 = Foo()

foo2 = Foo()

print(foo1 is foo2) # True

第三种方法:元类,元类是用于创建类对象的类,类对象创建实例对象时一定要调用call方法,因此在调用call时候保证始终只创建一个实例即可,type是python的元类

class Singleton(type):

def call(cls, *args, **kwargs):

if not hasattr(cls, ‘_instance’):

cls._instance = super(Singleton, cls).call(*args, **kwargs)

return cls._instance

Python2

class Foo(object):

metaclass = Singleton

Python3

class Foo(metaclass=Singleton):

pass

foo1 = Foo()

foo2 = Foo()

print(foo1 is foo2) # True

18.反转一个整数,例如-123 --> -321

class Solution(object):

def reverse(self,x):

if -10<x<10:

return x

str_x = str(x)

if str_x[0] !=“-”:

str_x = str_x[::-1]

x = int(str_x)

else:

str_x = str_x[1:][::-1]

x = int(str_x)

x = -x

return x if -2147483648<x<2147483647 else 0

if name == ‘main’:

s = Solution()

reverse_int = s.reverse(-120)

print(reverse_int)

19.设计实现遍历目录与子目录,抓取.pyc文件

第一种方法:

import os

def get_files(dir,suffix):

res = []

for root,dirs,files in os.walk(dir):

for filename in files:

name,suf = os.path.splitext(filename)

if suf == suffix:

res.append(os.path.join(root,filename))

print(res)

get_files(“./”,‘.pyc’)

第二种方法:

import os

def pick(obj):

if ob.endswith(“.pyc”):

print(obj)

def scan_path(ph):

file_list = os.listdir(ph)

for obj in file_list:

if os.path.isfile(obj):

pick(obj)

elif os.path.isdir(obj):

scan_path(obj)

if name==‘main’:

path = input(‘输入目录’)

scan_path(path)

第三种方法

from glob import iglob

def func(fp, postfix):

for i in iglob(f"{fp}/**/*{postfix}", recursive=True):

print(i)

if name == “main”:

postfix = “.pyc”

func(“K:\Python_script”, postfix)

20.一行代码实现1-100之和

count = sum(range(0,101))

print(count)

21.Python-遍历列表时删除元素的正确做法

遍历在新在列表操作,删除时在原来的列表操作

a = [1,2,3,4,5,6,7,8]

print(id(a))

print(id(a[:]))

for i in a[:]:

if i>5:

pass

else:

a.remove(i)

print(a)

print(‘-----------’)

print(id(a))

#filter

a=[1,2,3,4,5,6,7,8]

b = filter(lambda x: x>5,a)

print(list(b))

列表解析

a=[1,2,3,4,5,6,7,8]

b = [i for i in a if i>5]

print(b)

倒序删除 因为列表总是‘向前移’,所以可以倒序遍历,即使后面的元素被修改了,还没有被遍历的元素和其坐标还是保持不变的

a=[1,2,3,4,5,6,7,8]

print(id(a))

for i in range(len(a)-1,-1,-1):

if a[i]>5:

pass

else:

a.remove(a[i])

print(id(a))

print(‘-----------’)

print(a)

22.字符串的操作题目

全字母短句 PANGRAM 是包含所有英文字母的句子,比如:A QUICK BROWN FOX JUMPS OVER THE LAZY DOG. 定义并实现一个方法 get_missing_letter, 传入一个字符串采纳数,返回参数字符串变成一个 PANGRAM 中所缺失的字符。应该忽略传入字符串参数中的大小写,返回应该都是小写字符并按字母顺序排序(请忽略所有非 ACSII 字符)

下面示例是用来解释,双引号不需要考虑:

(0)输入: “A quick brown for jumps over the lazy dog”

返回: “”

(1)输入: “A slow yellow fox crawls under the proactive dog”

返回: “bjkmqz”

(2)输入: “Lions, and tigers, and bears, oh my!”

返回: “cfjkpquvwxz”

(3)输入: “”

返回:“abcdefghijklmnopqrstuvwxyz”

def get_missing_letter(a):

s1 = set(“abcdefghijklmnopqrstuvwxyz”)

s2 = set(a.lower())

ret = “”.join(sorted(s1-s2))

return ret

print(get_missing_letter(“python”))

other ways to generate letters

range(“a”, “z”)

方法一:

import string

letters = string.ascii_lowercase

方法二:

letters = “”.join(map(chr, range(ord(‘a’), ord(‘z’) + 1)))

23.可变类型和不可变类型

1,可变类型有list,dict.不可变类型有string,number,tuple.

2,当进行修改操作时,可变类型传递的是内存中的地址,也就是说,直接修改内存中的值,并没有开辟新的内存。

3,不可变类型被改变时,并没有改变原内存地址中的值,而是开辟一块新的内存,将原地址中的值复制过去,对这块新开辟的内存中的值进行操作。

24.is和==有什么区别?

is:比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象。是否指向同一个内存地址

== : 比较的两个对象的内容/值是否相等,默认会调用对象的eq()方法

25.求出列表所有奇数并构造新列表

a = [1,2,3,4,5,6,7,8,9,10]

res = [ i for i in a if i%2==1]

print(res)

26.用一行python代码写出1+2+3+10248

from functools import reduce

#1.使用sum内置求和函数

num = sum([1,2,3,10248])

print(num)

#2.reduce 函数

num1 = reduce(lambda x,y :x+y,[1,2,3,10248])

print(num1)

27.Python中变量的作用域?(变量查找顺序)

函数作用域的LEGB顺序

1.什么是LEGB?

L: local 函数内部作用域

E: enclosing 函数内部与内嵌函数之间

G: global 全局作用域

B: build-in 内置作用

python在函数里面的查找分为4种,称之为LEGB,也正是按照这是顺序来查找的

28.字符串 "123" 转换成 123,不使用内置api,例如 int()

方法一: 利用 str 函数

def atoi(s):

num = 0

for v in s:

for j in range(10):

if v == str(j):

num = num * 10 + j

return num

方法二: 利用 ord 函数

def atoi(s):

num = 0

for v in s:

num = num * 10 + ord(v) - ord(‘0’)

return num

方法三: 利用 eval 函数

def atoi(s):

num = 0

for v in s:

t = “%s * 1” % v

n = eval(t)

num = num * 10 + n

return num

方法四: 结合方法二,使用 reduce,一行解决

from functools import reduce

def atoi(s):

return reduce(lambda num, v: num * 10 + ord(v) - ord(‘0’), s, 0)

29.Given an array of integers

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定nums = [2,7,11,15],target=9 因为 nums[0]+nums[1] = 2+7 =9,所以返回[0,1]

class Solution:

def twoSum(self,nums,target):

“”"

:type nums: List[int]

:type target: int

:rtype: List[int]

“”"

d = {}

size = 0

while size < len(nums):

if target-nums[size] in d:

if d[target-nums[size]] <size:

return [d[target-nums[size]],size]

else:

d[nums[size]] = size

size = size +1

solution = Solution()

list = [2,7,11,15]

target = 9

nums = solution.twoSum(list,target)

print(nums)

给列表中的字典排序:假设有如下list对象,alist=[{“name”:“a”,“age”:20},{“name”:“b”,“age”:30},{“name”:“c”,“age”:25}],将alist中的元素按照age从大到小排序 alist=[{“name”:“a”,“age”:20},{“name”:“b”,“age”:30},{“name”:“c”,“age”:25}]

alist_sort = sorted(alist,key=lambda e: e.getitem(‘age’),reverse=True)

30.python代码实现删除一个list里面的重复元素

def distFunc1(a):

“”“使用集合去重”“”

a = list(set(a))

print(a)

def distFunc2(a):

“”“将一个列表的数据取出放到另一个列表中,中间作判断”“”

list = []

for i in a:

if i not in list:

list.append(i)

#如果需要排序的话用sort

list.sort()

print(list)

def distFunc3(a):

“”“使用字典”“”

b = {}

b = b.fromkeys(a)

c = list(b.keys())

print©

if name == “main”:

a = [1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]

distFunc1(a)

distFunc2(a)

distFunc3(a)

31.统计一个文本中单词频次最高的10个单词?

import re

方法一

def test(filepath):

distone = {}

with open(filepath) as f:

for line in f:

line = re.sub(“\W+”, " ", line)

lineone = line.split()

for keyone in lineone:

if not distone.get(keyone):

distone[keyone] = 1

else:

distone[keyone] += 1

num_ten = sorted(distone.items(), key=lambda x:x[1], reverse=True)[:10]

num_ten =[x[0] for x in num_ten]

return num_ten

方法二

使用 built-in 的 Counter 里面的 most_common

import re

from collections import Counter

def test2(filepath):

with open(filepath) as f:

return list(map(lambda c: c[0], Counter(re.sub(“\W+”, " ", f.read()).split()).most_common(10)))

32.请写出一个函数满足以下条件

该函数的输入是一个仅包含数字的list,输出一个新的list,其中每一个元素要满足以下条件:

1、该元素是偶数

2、该元素在原list中是在偶数的位置(index是偶数)

def num_list(num):

return [i for i in num if i %2 0 and num.index(i)%20]

num = [0,1,2,3,4,5,6,7,8,9,10]

result = num_list(num)

print(result)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值