我的意思是给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)。