经典题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
20class 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
6n=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
11class 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
7a=[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
8def 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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复