代码实现:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14def 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)
输出结果:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
220 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
逐行说明:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#定义函数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在列表中找出三个数相加等于目标值返回这两个数在列表中内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复