为何判断i≠j无需关联列表,list[i]却需要?i+j==t为何不可行?
问题解答
1. 为什么i != j不用访问列表,list[i]却需要?
i和j是range(len(list))生成的索引数字,比如你的列表长度是5,它们就是0、1、2、3、4这些整数。判断i != j只是两个整数比大小,跟列表本身没关系,当然不用访问列表。
那为啥它们能对应列表的位置?因为len(list)会先算出列表的元素个数,range()就生成从0到这个个数减1的整数,刚好是列表所有合法的索引位置——相当于用列表的长度“约束”了i、j的取值范围,让它们能精准对应列表里的元素,但本质上i、j还是独立的数字,不是列表的一部分。
而list[i]是用索引去列表里拿对应位置的元素,比如list[0]就是拿列表第1个元素3,这时候必须去读取列表里的数据,所以需要访问列表。
2. 为啥不能直接用i + j == t判断?
i和j是元素的位置编号,t=12是你要找的元素值的和,这俩完全不是一回事。
举个例子:你的代码里能满足条件的是3+9=12,对应的i是0(3的位置),j是1(9的位置),0+1=1,跟12差远了。你要的是元素值相加等于12,不是位置编号相加等于12,所以直接用i+j==t根本找不到正确的结果。
3. 把list[i]换成i后为啥没输出?
你的列表长度是5,所以i和j的取值范围都是0到4,最大的i+j是4+4=8,而你的t是12,8<12,根本不存在两个索引相加等于12的情况,所以判断条件永远不成立,自然不会执行print,控制台就没输出。
原来的代码是拿元素值相加(比如3+9=12),换成i之后变成拿索引相加,数值范围完全达不到t的要求,结果就和预期不符了。
内容的提问来源于stack exchange,提问作者ineedstackoverflowplz
相关产品推荐
相关产品推荐

