我是靠谱客的博主 繁荣手套,最近开发中收集的这篇文章主要介绍05-10 两数相加 & map函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

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

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

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()

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

n=len(list)
for x in range(n):
a=target-list[x]
if a in list:
y=list.index[a] #知道元素求下标

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

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:

a=[1,2,4]
b=[2,4,5]
res1=map(str,a)
res2=mao(str,b)
返回:['1','2','4']
['2','4','5']

eg2:

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 两数相加 & map函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部