我是靠谱客的博主 繁荣手套,这篇文章主要介绍05-10 两数相加 & map函数,现在分享给大家,希望可以做个参考。

经典题1、给定一个list和一个target,判断是否list内是否有两个数的和
为target,若满足返回这两个数和下标?

#list=[1,4,5,7]
#target=9

解法1:
两次循环遍历整个list,依次判断和是否为target,速度慢

解法二:用一个for循环,target-num,判断差是否在list

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Twonum(): #def __init__(self,list,target): 简单类,不需要定义属性,直接定义方法,后续直接调用 def looknum(self,list,target): #n=len(list) 用枚举就不需要list长度 for i num in enumerate(list): #if (target-num) in list : 要是代码简洁好看 定义target-num为一变量 n=target-num if n in list and n!=num: #j=find(target-num,list) find用法错误,基础函数不熟悉 j=list.find('n') #return 'i'+'j' 因两数和,未判断list[i]!=list[j]直接返 #回,False,这个判断加在上if 更简洁 return 'i'+'j' print('没有满足要求的两个数') if __name__ =="__main__": t=Twosum() #t() 上述创建类ok,类的方法调用有误,没有指明方法名,函数可以直接调用 t.looknum()

上述方法之改进:不用枚举遍历

复制代码
1
2
3
4
5
6
n=len(list) for x in range(n): a=target-list[x] if a in list: y=list.index[a] #知道元素求下标

方法三: 运用字典,提高速度

复制代码
1
2
3
4
5
6
7
8
9
10
11
class Solution(): def run(self,list,target): dict={} for i,num in enumerate(list): dict[i]=num #? 可以直接dict(list) 吗? for i,num in enumerate(list): j=hashmap.get(target-num) if j is not None and i !=j: return [i,j]

map(function,iterible…) 将函数function应用于可迭代数据中的每一个元素,以list形式返回,要是某个iterible长度不一样,短的iterible的位置None自动补齐,若None不支持function(如None和int不能进行相加)则会报错;

eg:

复制代码
1
2
3
4
5
6
7
a=[1,2,4] b=[2,4,5] res1=map(str,a) res2=mao(str,b) 返回:['1','2','4'] ['2','4','5']

eg2:

复制代码
1
2
3
4
5
6
7
8
def add(x,y,z): return x,y,z list1=[1,2,3] list2=[1,2] res=map(add,list1,list2) print(res) 返回:[(1,1),(2,2),(3,None)]

最后

以上就是繁荣手套最近收集整理的关于05-10 两数相加 & map函数的全部内容,更多相关05-10内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部