Python中两段末尾元素插入代码输出不同,原因何在?
两段Python代码为啥输出不一样?
下面两段代码看起来逻辑差不多,但运行结果完全不同,问题出在哪?
代码1
t1 = ['CS', 'IP', 'IT'] t1.insert(len(t1)-1, t1.pop()) print(t1) # 输出:['CS', 'IP', 'IT']
代码2
t1 = ['CS', 'IP', 'IT'] x = t1.pop() t1.insert(len(t1)-1, x) print(t1) # 输出:['CS', 'IT', 'IP']
关键原因:Python函数参数是从左到右依次求值
- 代码1里,
insert的两个参数会先按顺序算完再执行插入:- 先算第一个参数
len(t1)-1:此时列表长度是3,算出来是2。 - 再执行
t1.pop():把最后一个元素'IT'删掉,列表变成['CS', 'IP']。 - 最后执行插入:往索引2的位置插
'IT',但此时列表长度只有2,索引2等于列表长度,元素直接插到末尾,所以列表又变回原来的样子。
- 先算第一个参数
- 代码2里步骤是分开的:
- 先执行
t1.pop():删掉'IT',列表变成['CS', 'IP'],把'IT'存在x里。 - 再算
len(t1)-1:此时列表长度是2,算出来是1。 - 执行插入:往索引1的位置插
'IT',结果就是['CS', 'IT', 'IP']。
- 先执行
说白了就是,代码1里计算插入位置的时候,还没执行删除操作,用的是原列表的长度;代码2是删完再算位置,用的是变短后的列表长度,这就导致了最终结果的差异。
内容的提问来源于stack exchange,提问作者user19107606
相关产品推荐
相关产品推荐

