python怎么用append()啊?

img

我的意思是给7 11加个列表。
但不知道为什么结果会是【0,0,0]

求解答啊啊

外层循环到4的时候,也符合条件,所以4在列表nums的索引是0,然后被pop弹出。下一个元素7又来到0位置,如此循环。

列表.append(元素)

由上图可知,end列表一共有3个元素,所以到输出那一行时,end列表被追加过3次元素(即,被append()过3次)。
又由图可知,代码包含了两次for循环,三个if分支。
先明确一点,受限于第二个if条件,end列表有添加操作的前提条件就是ac等于4、7、11或15.
我们来分析这三次:

!!!第一次:

nums=[4,7,11,15]
end=[]
外层for循环变量ac==4
内层for循环变量ad==14

语句end.append(nums.index(ac))

此时,ac+ad等于18,符合第一个if;而ac等于4,等于nums列表的第一个元素,所以end列表被end.append(nums.index(ac))语句添加了第一个元素,即0。(listA.index('xx')语句会输出列表中第一个'xx'元素的索引,而end列表中第一个元素4的索引是0,所以append()语句添加进end列表的元素是0)

语句nums.pop(nums.index(ac))

此时ac等于4,于是该语句将nums列表中第一个等于4的元素删除。

简要推理,得出ad应该等于14,而14不在nums列表中,不符合第二个if条件,该分支内代码不执行。
至此,第一次end列表的添加操作结束,简析两个列表状态:
nums=[7,11,15]
end=[0]

!!!第二次~第三次:

nums=[7,11,15]
end=[0]
外层for循环变量ac==7
内层for循环变量ad==11

语句end.append(nums.index(ac))

此时,ac+ad等于18,符合第一个if;而ac等于7,等于nums列表的第一个元素,所以end列表被end.append(nums.index(ac))语句添加了第一个元素,即0。此时,end=[0,0]

语句nums.pop(nums.index(ac))

此时ac等于7,于是该语句将nums列表中第一个等于7的元素删除。此时,nums=[11,15]

语句end.append(nums.index(ad))

简要推理,得出ad应该等于11,而11在nums列表中,符合第二个if条件,执行该语句。
又因为11是nums列表的第一个元素,索引为0,所以该语句向end列表添加了元素0。此时,end=[0,0,0]

至此,第二至三次end列表的添加操作结束,简析两个列表状态:
nums=[11,15]
end=[0,0,0]

而第三个if分支内还有两行输出语句,是print(end);print(ac,ad)
此时end=[0,0,0],ac等于7,ad等于11,所以输出是:
[0,0,0]
7 11

那么,三次添加分析完毕,这就是为什么输出看似不对劲的原因。
推荐修改方案:将其中几个list.index(element)语句改为element(如下所示)。

nums=[4,7,11,15]
end=[]
target = 9
for ac in range (1,99):
    for ad in range (1,99):
        if ac+ad==18:
            if ac in nums:
                end.append(ac)
                nums.pop(nums.index(ac))
                if ad in nums:
                    end.append(ad)
                    print(end)
                    print(ac,ad)

如果您的“给7 11加个列表”是将7、11等符合三个if条件判断的元素添加到end列表的意思,那么此方案可行。
另外,您也可以完全不用list.pop(list.index(element))方法,可以直接list.remove(element)。