python在列表中找出三个数相加等于目标值返回这两个数在列表中的下标(ThreeSum)

代码实现: 

def threeSum(alist, targetnum):
    for i, j in enumerate(alist):
        for m, n in enumerate(alist[i+1:]):
            realM = i+m+1
            k = i+m+2
            if alist[k:].count(targetnum - (j+n)) > 0:
                for x in range(alist[k:].count(targetnum - (j+n))):
                    y = alist.index(targetnum - (j+n), k)
                    print(i, realM, y)
                    k = y+1


a = [1, 3, 4, 6, -3, 4, 1, 3, 8, 9, 3, 0, -3]
threeSum(a, 7)

输出结果:

0 1 7
0 1 10
0 3 11
0 4 9
0 7 10
0 9 12
1 2 11
1 5 11
1 6 7
1 6 10
2 3 4
2 3 12
2 7 11
2 10 11
3 4 5
3 5 12
3 6 11
4 6 9
5 7 11
5 10 11
6 7 10
6 9 12

逐行说明:

#定义函数threeSum接收参数为列表及目标值
def threeSum(alist, targetnum):
#假设这三个数分别为a,b,c和为targetnum,此处设置第一重循环,获取循环获取a的下标和值
    for i, j in enumerate(alist):
#此处设置第二重循环用于获取b的下标和值
        for m, n in enumerate(alist[i+1:]):
#由于b的下标和值使用了切片操作每次取i+1后值,每次获取的下标m不是在原列表中的实际为,所以需要通过计算realM得到b在原列表的实际位置
            realM = i+m+1
#根据i和m的值计算c在原列表中取值的起始位置,由于c需要在b后面一位开始取值,所以需要+2
            k = i+m+2
#通过统计c出现次数,判断targetnum - (j+n)是否出现在列表索引k位置之后
            if alist[k:].count(targetnum - (j+n)) > 0:
#c值在列表索引k位置之后可能出现多次,此处用循环取得所有c值
                for x in range(alist[k:].count(targetnum - (j+n))):
#使用index函数获取c值对应的下标索引
                    y = alist.index(targetnum - (j+n), k)
#打印一组a,b,c值对应的索引下标
                    print(i, realM, y)
#重置c值的搜索起始位置为y+1
                    k = y+1

#定义输入列表数据
a = [1, 3, 4, 6, -3, 4, 1, 3, 8, 9, 3, 0, -3]
#调用函数传入列表a及目标值7
threeSum(a, 7)

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值