python相关岗位算法面试题总结(持续更新)

在这里插入图片描述

这里写目录标题

一、统计字符串中出现最多的字符并输出

def fun_dict(list):
    dt = {}
    for item in list:
        if item not in dt:
            dt[item] = 1
        else:
            dt[item] += 1
    r=sorted(dt.items(),key=lambda x:x[1])
    return r[-1][0]

str1 = "aaaccccdef"
print(fun_dict(str1))

二、输出 9*9 乘法口诀表

def fun_9():
    for i in range(1,10):
        for j in range(1,i+1):
            print("{}*{}={}".format(i,j,i*j),end="\t")
        print()

fun_9()
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

三、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

def fun_str():
    s=input('请输入字符串:')
    letters,space,digit,others=0,0,0,0
    for c in s:
        if c.isalpha():
            letters+=1
        elif c.isspace():
            space+=1
        elif c.isdigit():
            digit+=1
        else:
            others+=1
    print('英文字母={},空格={},数字={},其他字符={}'.format(letters,space,digit,others))

fun_str()

请输入字符串:werwe34534 e564
英文字母=6,空格=2,数字=8,其他字符=0

四、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),

#求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
def fun_a():
    '''
    2+22+222+2222+22222
    可以理解为:
    20000 + 2*2000 + 3*200 + 4*20 + 5*2
    也就是:
    1*2*10^4 + 2*2*10^3 + 3*2*10^2 + 4*2*10^1 + 5*2*10^0
    所以简单迭代就可以出结果
    '''
    a=2
    t=5
    num=0
    for i in range(1,t+1):
        num+=i*a*(10**(t-i))
    print(num)

fun_a()

五、题目025:求1+2!+3!+…+20!的和

def fun_tm():

    s=0
    t=1
    for n in range(1,21):
        t=t*n
        s=s+t
    print(s)
fun_tm()

六、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

def fun_output(s,l):
    if l==0:
        return
    print(s[l-1])
    fun_output(s,l-1)

def fun_tm1():
    s=input('请输入字符串:')
    l=len(s)
    fun_output(s,l)

fun_tm1()

七、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

def tm_2():
    num=12321
    s=str(num)
    for i in range(len(s)//2):
        if s[i]!=s[-i-1]:
            print(False)
            break
    else:
        print(True)

tm_2()

八、求100之内的素数。

def tm036():
    '''
    素数就是质数
    '''
    arr = [2]
    for i in range(3,100):
        for j in arr:
            if i%j==0:
                break
        else:
            arr.append(i)
    print(arr)

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

九、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

def tm_3():
    a=[1,4,6,8,9,23,24,55,88]
    b=99
    for i in a:
        if b<i:
            a.insert(a.index(i),b)
            break
    else:
        a.append(b)
    print(a)

tm_3()

十、取一个整数a从右端开始的4-7位

写的时候注意一下python切片是[-7:-4)左闭右开的,不包含[-4]的,所以要写成-3才能取到

def num():
    a=123456
    b=str(a)

    print(b[-3:-1])
num()

十一、输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

def fun_tm(list):
    max_a=max(list)
    i=list.index(max_a)
    list[0],list[i]=list[i],list[0]
    print(list)

    min_b=min(list)
    j=list.index(min_b)
    list[-1],list[j]=list[j],list[-1]
    print(list)

lt=[7,2,3,6,8,5,4]
fun_tm(lt)

十二、从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。

def fun_tm():

    while True:
        c=input("请输入字符:")
        if c=="#":
            break
        else:
            with open('1.log', 'a') as f:
                f.write(c)

fun_tm()

十三、有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中

def fun_tm1():
    with open('1.log',r) as f:
        a=f.read()
    with open('2.log',r) as f:
        b=f.read()
    with open('3.log',a) as f:
        f.write(a+b)

fun_tm1()

十四、找到年龄最大的人,并输出。

person = {"li":18,"wang":50,"zhang":20,"sun":22}
def fun_tm4():
    dt=sorted(person.items(),key=lambda x:x[1],reverse=True)
    person1={}
    for i in dt:
        person1[i[0]]=i[1]
    print(person1)
fun_tm4()

十五、写一个函数比较两个列表是否相等

l1=[1,2,3]
l2=[2,3,1]
l3=[1,4,3]

def fun_t1(l1,l2):
    lt=[]
    for i in l1:
        if i in l2:
            lt.append(i)

    if len(lt)==len(l2):
        print(True)
    else:
        print(False)
fun_t1(l1,l3)

十六、查找字符串中的重复和非重复子字符串

def fun_s(s):
    li=[]
    li1=[]
    for i in s:
        if s.count(i)>1:
            li.append(i)
        else:
            li1.append(i)
    print(li)
    print(li1)

s='wertyt'
fun_s(s)

十七、给定文件的路径,返回文件名及所在目录

import os
def test():
    path=os.path.dirname(os.path.dirname(__file__))
    filename=os.path.basename(path)
    docname=os.path.dirname(path)
    return filename,docname
print(test())

十八、单例模式

class One_Bject:
    obj=None

    def __new__(cls, *args, **kwargs):
        if obj is not None:
            cls.obj=super().__new__(cls)
        return cls.obj

if __name__ == '__main__':
    obj=One_Bject
    obj1=One_Bject
    print(id(obj))
    print(id(obj1))

执行结果:

2371821596192
2371821596192

十九:写一个函数统计传入的列表中每个数字出现的次数并返回对应的字典。

方法一:

def fun(list):
    dic={}
    for i in list:
        if i not in dic:
            dic[i]=1
        else:
            dic[i]+=1
    print(dic)
fun([12,3,4,5,3,2])

方法二:

def fun1(list):
    dic={}
    for index,item in enumerate(list):
        dic[item]=dic.get(item,0)+1
    print(dic)
fun1([12,3,4,5,3,2])

二十、使用Python代码实现遍历一个文件夹的操作。

g = os.walk('D:\second_hand_car\SecondHand_list_query')
for path, dir_list, file_list in g:
    for dir_name in dir_list:
        print(os.path.join(path,dir_name))
    for file_name in file_list:
        print(os.path.join(path,file_name))

二十一、给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

例如输入:[1,2,3,3,3]输出3
例如输入:[1,2,3]输出False

class S169:
    def func(self, nums):
        l = len(nums) // 2
        dic = {}
        for num in nums:
            if num not in dic:
                dic[num] = 1
            else:
                dic[num] += 1
            # print(dic)
            if dic[num] > l:
                return num


r = S169()
nums = [2, 2, 1, 1, 1, 2, 2]
print(r.func(nums))

在这里插入图片描述

  • 21
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
Python算法面试题比较多,常见的考点有数据结构、动态规划、贪心算法、递归与分治、字符串处理与正则表达式等等。以下以具体题目进行分析: 1. “用Python实现斐波那契数列”: 斐波那契数列是一个经典的算法问题,可以用递归或者循环的方式实现。Python代码如下: 递归实现: ``` def fibonacci(n): if n < 2: return n else: return fibonacci(n-1) + fibonacci(n-2) ``` 循环实现: ``` def fibonacci(n): if n < 2: return n prev, curr = 0, 1 for i in range(n-1): prev, curr = curr, prev+curr return curr ``` 2. “给定一个字符串,找出其中最长的回文子串”: 这是一个比较有难度的问题,可以用动态规划或者中心扩展法实现。Python代码如下: 动态规划实现: ``` def longest_palindrome(s): if not s: return "" n = len(s) dp = [[False]*n for _ in range(n)] start, max_len = 0, 1 for i in range(n): dp[i][i] = True for j in range(i): if s[i] == s[j] and (i-j <= 2 or dp[j+1][i-1]): dp[j][i] = True if i-j+1 > max_len: max_len = i-j+1 start = j return s[start:start+max_len] ``` 中心扩展法实现: ``` def longest_palindrome(s): if not s: return "" n = len(s) start, max_len = 0, 1 for i in range(n): l, r = i, i while r < n-1 and s[r] == s[r+1]: r += 1 while l > 0 and r < n-1 and s[l-1] == s[r+1]: l -= 1 r += 1 if r-l+1 > max_len: max_len = r-l+1 start = l return s[start:start+max_len] ``` 3. “给定一个无序数组,找出其中第k大的元素”: 这是一个比较常见的问题,可以使用快速选择算法实现。Python代码如下: 快速选择实现: ``` import random def quick_select(nums, k): n = len(nums) pivot = random.choice(nums) lt = [x for x in nums if x < pivot] eq = [x for x in nums if x == pivot] gt = [x for x in nums if x > pivot] if k <= len(gt): return quick_select(gt, k) elif k <= len(gt) + len(eq): return pivot else: return quick_select(lt, k-len(gt)-len(eq)) ``` 以上是Python算法面试题的部分实现,不同题目可能涉及的知识点不同,需要根据具体情况进行思考和实现。需要注意的是,除了代码的正确性,时间复杂度和空间复杂度也是考察算法能力的重要指标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值