python面试算法题_python算法面试题总结

各种类型的算法

import copy

# def num():

# return [lambda x, i=i: x*i for i in range(4)]

# print([m(2) for m in num()])

# M(2)是取值得2倍 这个问题涉及到了Python的闭包及延时绑定的知识(Python作用域)。

# 在Python核心编程里,闭包的定义如下:

# 如果在一个内部函数里,对外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认定是闭包。

# 总结为三点:

# 1、是一个内嵌函数

# 2、对外部函数变量引用

# 3、外部函数返回内嵌函数

# 简单的闭包例子:

# def counter(start_at=0):

# count = [start_at]

# def incr():

# count[0] += 1

# return count[0]

# return incr

# 上面的那道题,可以写成这样:

# def func():

# fun_list = []

# for i in range(4):

# def foo(x):

# return x*i

# fun_list.append(foo)

# return fun_list

# for m in func():

#   print m(2)

# func()是一个包含四个函数的列表:

# [, , , ]

# 当我们执行 m(2) 时,运行到foo()内部函数,发现变量 i 并不是foo()中的变量,于是就到外部函数func中寻找变量 i ,但此时外部的 for 已经循环完毕,最后的 i =3 。所以,每次

# 执行m(2),i 的值都是 3 ,因此,最终结果会是 [6, 6, 6, 6] 。

# 当在foo()中添加 i=i 后,即:

# def func():

# fun_list = []

# for i in range(4):

# def foo(x, i=i):

# return x*i

# fun_list.append(foo)

# return fun_list

# for m in func():

#   print m(2)

# 这样的话,for循环执行时,就已经把 i(0, 1, 2, 3) 的值传给了foo()函数,此时的 i 已经是foo()函数的内部变量,运行到foo()函数时,就不会到外部函数寻找变量 i ,直接运行

# def num():

# return [lambda x: i * x for i in range(4)]

# print([m(1) for m in num()])

#

#

#

# def num():

# return (lambda x: i * x for i in range(4))

# print([m(2) for m in num()])

# 给定

# nums = [2, 7, 11, 15], target = 9

# # 因为

# nums[0] + nums[1] = 2 + 7 = 9

# # 所以返回

# [0, 1]

# todo 任务

# todo 也可以理解为to do to do 是将要做的事情,还没做的事情

# def get_list_values(nums, values):

# """

# :param nums传过来的list

# :param values 和为9

# :returns 索引

# """

#

# for i in nums:

# a = (values - i) # 算出差值减少一次for循环

# j = nums.index(i)

# try:

# k = nums.index(a)

# if j <= k:

# print(j, k)

# except:

# if a == 0:

# print(j)

#

#

# if __name__ == '__main__':

# get_list_values([7, 2, 6, 9, 11, 15], 11)

#

# def get_list_values(nums,values):

# """

# :param nums传过来的list

# :param values 和为9

# :returns 索引

# """

# for i in nums:

# a=(values-i)#算出差值减少一次for循环

# j=nums.index(i)

# if a!=0: #值为不为9

# if a in nums: #in的时间复杂度为1

# k=nums.index(a)

# if j<=k:#去重

# print(j,k)

# else:

# print(j)

#

# if __name__ == '__main__':

# get_list_values([7,2,6,9,11,15],11)

# def get_index(nums, target):

# """

# :param nums:传的参数列表

# :param target:目标值

# :return:索引值列表

# """

# index_dict={

#

# }

# for index,num in enumerate(nums):

# tem=target-num

# tem_index=index_dict.get(tem,'')

# if tem_index:

# print(tem_index,index)

# # return [tem_index,index]

# else:

# index_dict[num]=index

#

# if __name__ == '__main__':

# pp = get_index([2, 4, 5, 8, 1, 11, 4, 15, 7], 9)

# print(pp)

# 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

# 示例 1:

# 输入: 121 输出: true

# 示例 2:

# 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

#

# 示例 3:

# 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。

# def rev(num):

# """

# :param num:

# :return:

# """

# n=str(num)

# if num == int(n[::-1]):

# return True

# else:

# return False

#

# if __name__ == '__main__':

# a=rev(111)

# print(a)

# k = [1,2,3,4,5]

# n=copy.copy(k)

# print(f'{k}')

# print(f'{n}')

# print('-----------')

# k[3].append('231')

# print(f'{k}')

# print(f'{n}')

# 正常逻辑的深拷贝浅拷贝

# k=[1,2,3,4,['a','b']]

# c=copy.copy(k)

# k[4].append('c')

# print(k,c)

# print(k)

# print(id(k[4]))

# f=copy.deepcopy(k)

# print(id(k[4]),id(c[4]),id(f[4]))

## 迭代器:

# class FeiBo():

# def __init__(self,n):

# self.a = 1

# self.b = 1

# self.c = 0

# self.n = n

#

# def __iter__(self):

# return self

#

# def __next__(self):

# if self.c < self.n:

# r = self.a

# self.a,self.b = self.b, self.a+self.b

# self.c+=1

# return r

# else:

# raise StopIteration

#

# f=FeiBo(9)

# for i in f:

# print(i)

#

# ## 生成器:

#

# def FeiBo(n):

# a=1

# b=1

# for i in range(n):

# yield a

# a,b=b,a+b

# f=FeiBo(10)

# for i in f:

# print(i)

# 在一个长度为n的数组nums里的所有数字都在0-n-1的范围内,请找出数组中任意一个重复的数字

# class Son:

# def fint(self,nums: list[int]) -> int:

# dict={}

# for i in nums:

# if dict.get(i,''):

# return i

# else:

# dict[i]=1

# if __name__ == '__main__':

# fint[2,3,4,5,2,2,3]

def grt_nums(nums):

"""

:param nums: 传的值

:return: 返回重复的数

"""

for i in nums:

a= nums.count(i)

if a >=2:

print(a)

if __name__ == '__main__':

grt_nums([2,3,4,5,2,2,3,3])

'''

Stack() 创建一个新的空栈

push(item) 添加一个新的元素item到栈顶

pop() 弹出栈顶元素

peek() 返回栈顶元素

is_empty() 判断栈是否为空

size() 返回栈的元素个数

'''

# class Stack:

# def init(self):

# #设定一个空栈

# self.stack = []

# def push(self,item):

# self.stack.append(item)

# def pop(self):

# #栈的特性 尾部删除,尾部添加

# if self.stack ==[]:

# return None

# else:

# self.stack.pop(-1)

# def peek(self):

# #返回栈顶元素

# if self.stack ==[]:

# return None

# else:

# return self.stack[-1]

# def is_empty(self):

# # 判断是否为空

# return self.stack ==[]

# def size(self):

# #返回栈内元素的个数

# return len(self.stack)

# def get_num(par_str):

# """

# :param par_str: 字符串

# :return: num

# """

# par_list = par_str.split(' ')

#

# # print([i for i in par_list if i])

# # for i in par_list:

# # if "" in par_list:

# # par_list.remove("")

# # print(par_list)

# if __name__ == '__main__':

# get_num('hello, python hello , world')

# 字符串相乘

# 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式

# 示例 :

# 输入: num1 = "123", num2 = "456"

# 输出: "56088"

# def cheng(num1,num2):

# i1=""

# i2=""

# for i in num1:

# if i.isdigit():

# i1+=i

# for j in num2:

# if j.isdigit():

# i2+=j

# str1=str(int(i1)*int(i2))

# return str1

# if __name__ == '__main__':

# print(cheng('1122a','a133221aaaa'))

# def chong(llist):

# for index,i in enumerate(llist):

# i.get(i,"")

#

#

# if __name__ == '__main__':

# print(chong([1,2,3,4,5,3,2]))

# from selenium import webdriver

# from selenium.webdriver.chrome.options import Options

#

# chrome_options = Options()

# # chrome_options.add_argument('--headless') #不显示界面头等信息

# # chrome_options.add_argument('--disable-gpu')

# browser = webdriver.Chrome(chrome_options=chrome_options)

# browser.get("http://chinafoods.com.cn/")

# browser.find_element_by_id('sybm').send_keys("123456")

# browser.find_element_by_name("btncx").click()

python反转字符串

'''第一种:使用字符串切片'''

s = 'Hello World'

print(s[::-1]) # dlroW olleH

'''第二种:使用列表的reverse方法'''

l = list(s)

l.reverse()

print( "".join(l) ) # dlroW olleH

'''第三种:使用reduce'''

from functools import reduce

result = reduce(lambda x,y:y+x,s)

print( result ) # dlroW olleH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值