返回列表中两个数的和等于目标值的索引
限制条件: 列表中的数字可以重复, 但返回的索引不能重复
方法1:
def demo(array: list, target: int):
# 遍历列表
for index, value in enumerate(array):
# 求差值
tmp = target - value
# 排除索引重复的情况
if tmp == value and array.count(value) == 1:
continue
# 如果差值也在列表中直接返回结果
if tmp in array and tmp != value:
return [index, array.index(tmp)]
# 如果差值也在列表中但与当前值相等
# 要取后面的差值的索引并加上偏移量 index+1
if tmp in array:
return [index, array[index + 1 :].index(tmp) + index + 1]
方法2:
def demo(array, target):
# 存放数字(key)和索引(value)的字典
mydict = {}
# 遍历列表
for index, value in enumerate(array):
# 求差值
tmp = target - value
# 如果字典里存在该差值则直接返回索引
if mydict.get(tmp) is not None:
return [mydict[tmp], index]
# 否则放入字典
mydict[value] = index
输出:
if __name__ == '__main__':
li = [2, 7, 11, 15]
print(demo(li, 9))
li = [2, 7, 11, 15]
print(demo(li, 26))
li = [3, 2, 4]
print(demo(li, 6))
li = [3, 2, 3]
print(demo(li, 6))
li = [3, 3]
print(demo(li, 6))
li = [5, 6, 4, 1, 4]
print(demo(li, 8))
[0, 1] [2, 3] [1, 2] [0, 2] [0, 1] [2, 4]