我是靠谱客的博主 甜美服饰,最近开发中收集的这篇文章主要介绍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)

 

最后

以上就是甜美服饰为你收集整理的python在列表中找出三个数相加等于目标值返回这两个数在列表中的下标(ThreeSum)的全部内容,希望文章能够帮你解决python在列表中找出三个数相加等于目标值返回这两个数在列表中的下标(ThreeSum)所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部