python算法面试题总结
2021-04-26 10:27
标签:作用域 方法 param yield tar ISE epc _id str 各种类型的算法 python反转字符串 python算法面试题总结 标签:作用域 方法 param yield tar ISE epc _id str 原文地址:https://www.cnblogs.com/zjldeboke/p/13254164.htmlimport 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 # 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# 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 # 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])‘‘‘第一种:使用字符串切片‘‘‘
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
上一篇:python3 字典