Python中row[1]实现每行第二列字符串转整数的原理疑问
代码执行逻辑解析
首先看这段代码:
ev_data = [['vehicle', 'range', 'price'], ['Tesla Model 3 LR', '310', '49900'], ['Hyundai Ioniq EV', '124', '30315'], ['Chevy Bolt', '238', '36620']] for row in ev_data[1:]: ev_range = row[1] ev_range = int(ev_range) row[1] = ev_range print(ev_data)
核心问题拆解
1. 为什么修改row[1]能改变原列表ev_data的内容?
Python里的列表属于可变对象,当你用for row in ev_data[1:]循环时,row并不是原数据的副本——它直接指向ev_data里对应的那个子列表。打个比方,row就像你拿到的一把房门钥匙,开门进去修改房间里的东西,原房间(也就是ev_data里的子列表)自然会跟着变。所以你对row做的任何修改,都会直接作用在原ev_data的对应位置上。
2. row是如何定位并修改每行第二列的?
一步一步拆解循环过程:
ev_data[1:]:跳过索引为0的表头行,取后面所有子列表(也就是三行车辆数据)。- 每次循环时,
row就代表当前迭代到的那个子列表(比如第一次循环,row就是['Tesla Model 3 LR', '310', '49900'])。 row[1]:Python列表索引从0开始,所以row[1]就是这个子列表的第二个元素(也就是里程数,一开始是字符串类型的'310')。- 把
row[1]赋值给ev_range,再用int()转成整数,最后把整数重新赋值给row[1]——因为row指向原ev_data的子列表,所以原列表里的对应位置就被替换成整数了。
循环三次后,ev_data里所有车辆行的里程数就都从字符串变成整数了,最终打印的结果会是:
[['vehicle', 'range', 'price'], ['Tesla Model 3 LR', 310, '49900'], ['Hyundai Ioniq EV', 124, '30315'], ['Chevy Bolt', 238, '36620']]
内容的提问来源于stack exchange,提问作者NolongerHuman
相关产品推荐
相关产品推荐

