Python算法学习《一》
给定一个整数数组和一个目标值,找出数组中和为目标值的个两个数
同样的元素不能重复利用
L = [3, 7, 11, 9]
T = 10
方法一直接2个循环遍历
def fun(num, target):
for i in range(len(num) - 1):
for j in range(i + 1, len(num)):
if target - num[i] == num[j]:
return [i, j]
print(fun(L, T))
结果:
[0, 1]
方法二:使用索引,index()函数
def fun(num, target):
for i in range(len(num)):
if target - num[i] in num:
j = num.index(target - num[i])
if i == j: # 同样的元素不能重复利用
continue
else:
return [i, j]
结果:
print(fun(L, T))
[0, 1]
方法三:使用字典储存差值
def fun(num, target):
for i in range(len(num)):
if num[i] in d:
return [d[num[i]], i] # 遍历的元素是否与字典中差值相等, 如果是,那么因数2就找到了,d[差值]就是因数1的下标,i就是因数2的下标
else:
d[target - num[i]] = i # 将目标减去因数1的差值以及因数1的下标储存在字典中,键就是差值(也是我们要找的因数2),所对应的值就是因数1在原来列表中的下标
continue
print(fun(L, T))
结果:
[0, 1]
方法四:使用enumerate()函数
enumerate()是python的内置函数,enumerate参数为可遍历/可迭代的对象(如列表、字符串)
enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用enumerate
numerate()返回的是一个enumerate对象
例子:
f = ['a', 'b', 'c', 'd', 'e']
for index, value in enumerate(f):
print('{}:{}'.format(index, value))
结果:
0:a
1:b
2:c
3:d
4:e
可以同时返回下标和所对应的值
def fun(num, target):
for index, value in enumerate(num):
if target - value in num[index + 1:]: # 判断目标减去因数1的差值是否在除了因数1的列表中
return [index, num[index + 1:].index(
target - value) + index + 1] # 由于因数2是在num[idnex+1:]这个列表中,那么因数2的在原有列表中的下标是要加上index+1的
结果:
print(fun(L, T))
[0, 1]