列表中为什么不能用for item来替换,什么时候可以用for item 来替换

在类替换的时候,突然混淆了索引还是item,仔细想了想写下来

先来判断对错

numbers = [1, 2, 3]
for item in numbers:
    item = 10  
print(numbers)

你觉得输出结果是

numbers = [1, 2, 3]

还是

numbers = [10, 10, 10]

先说答案,正确的是:

numbers = [1, 2, 3]

列表替换用索引还是item解析

在遇到列表替换需求的时候,for item来更新内容是分情况的:

1. 为了搞懂这个,你需要复习一下基本数据类型:

如果列表包含的是不可变的数据类型(如整数、浮点数、字符串、元组等),那么修改这些基本类型的 item 不会改变列表中的内容。在 Python 中,这些类型是通过值传递的,所以修改 item 只会改变该变量的本地副本,而不会影响列表中的原始数据。

numbers = [1, 2, 3]
for item in numbers:
    item = 10  # 这只修改了 item,不会改变列表中的值

2. 同样,如果涉及浅拷贝或者切片也是不会改变元数据

numbers = [1, 2, 3]
for item in numbers[:]:  # numbers[:] 创建了一个列表的副本
    item = 10  # 这只修改了副本中的元素,原始列表保持不变

3. 那么什么时候可以使用item来更新原列表数据呢?

list01 = [[1, 2], [15, 17]]
for item in list01:
    item[0] = 5

在这个具体的例子中,循环结束后,list01 将变为 [[5, 2], [5, 17]]。每个子列表的第一个元素都被改成了 5,因为修改了每个子列表中索引为 0 的元素。这是因为 item 在循环中指向的是列表中的子列表对象,所以对 item 所做的更改直接影响了 list01。

如果你觉得以上很容易理解,那么看一下在类中替换应该也能懂了:

class TestModel:
   	 	def __init__(self, name=""):
       		self.name = name
       		self.sid = sid


class TestVive:
		def __init__(self):
			self.controller.update_test(stu)
			
	    def modify_test(self):
       	 	target = TestModel()
       		target.sid = int(input("请输入编号:"))
        	target.name = input("请输入学生姓名:")
        	if self.controller.update_test(stu):

class TestController:
		def __init__(self):
        	self.list_test = []
        	self.start_sid = 1
        	
		def update_test(self,target):
			for item in self.list_test:
            	if item.sid == targetu.sid:
				item.__dict__ = target.__dict__

这里的

item.__dict__ = target.__dict__

就是利用了上述 “3那么什么时候可以使用item来更新原列表数据呢?” 中所讲的知识点。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值