一、思路:

输入:数字列表number,目标值target

判断条件:数字列表中两个不同数字相加等于target

输出:符合条件的两个数字的下标,下标顺序排列

方法1:

def list(number, target):
    a = []
    number0 = []
    for i in number:
        number1.append(i)
        number1 = set(number)- set(number0)    ##number2是元组,存储所有不在number1中并且不重复的数

     
for j in number1:
        
if i+j == target:  a = [number.index(i), number.index(j)]  print(a)  return
number =
[1, 3, 4, 3, 2, 9]
target = 6
list(number, target)

方法2:把方法1中内层循环遍历的可迭代序列(number1)的生成简化了一下,更简洁

def list(number, target):
    a = []
    for i in number:
        number1 = [x for x in number if x != i]   ##number1中不包含i
        for j in number1:
            if i+j == target:
                a = [number.index(i), number.index(j)]
                a.sort()
                print(a)
                return
list([1, 3, 4, 3, 2, 9], 6)

 二、扩展一:

可以看到上面执行时输入的列表中是存在重复值的,那如果题目中没有要求是不同数字相加,要怎么实现呢?

def list(number, target):
    a = []
    number1 = number.copy()        
    for i in number:
        number1.remove(i)
        for j in number1:    ##number1中是number中所有不等于i的数字
            if i+j == target:
                if i == j:     ##由于number.index(i)只能取到第一个下标,所以当两个相加的数字相等时,可以用内置函数enumerate()来获取列表元素的索引和值
                    a = [x for x, y in enumerate(number) if y == i][:2]          ##因为只需要输出任意两个符合条件的元素下标,这里取前两个
                else:
                    a = [number.index(i), number.index(j)]
                a.sort()
                print(a)
          return
number = [1, 3, 4, 3, 2, 9]
target = 6
list(number, target)
 

因为这里只要找到两个数字相加等于目标值就行,对数字在列表中的顺序并没有要求,所以我们还可以先对重复数字进行处理,如果重复数字n,2n等于目标值,那么直接输出;2n不等于目标值再看列表中其他的数字

def list(number, target):
    a = []
    if len(number) != len(set(number)):
        number1 = filter(lambda x: number.count(x) > 1, number)
        if target % 2 == 0:
            for i in number1:
                if 2 * i == target:
                    a = [x for x, y in enumerate(number) if y == i][:2]
                    a.sort()
                    print(a)
                    return
    number2 = number.copy()
    for i in number:
        number2.remove(i)
        for j in number2:
            if i !=j and i + j == target:
                a = [number.index(i), number.index(j)]
                a.sort()
                print(a)
                return
number = [1, 3, 4, 3, 7, 9]
target = 8
list(number, target)

三、 扩展二:

这里题目限制了只需要任意两个相加符合条件的数字,如果是需要输出所有符合两个数字相加等于目标值的组合又怎么来实现呢?

def list(number, target):
    a = []
    number1 = number.copy()
    for x, y in enumerate(number):
        number1.remove(y)
        for m, n in enumerate(number1, x+1):      ##这里number1中删除了数字y,enumerate()生成对象的时候,制定下标从y在number中的下标加一开始
            if y + n == target:
                a.append((x, m))
    a.sort()
    print(a)


number = [1, 2, 3, 4, 2, 3, 4]
target = 5
list(number, target)
02-20 23:11