为什么ab只有列表不同,但是遍历相同,而a的遍历值变了a不变,b的遍历值变了b会跟着变
当我们遍历 a 时,每次迭代中,变量 i 会存储 a 中的一个字符串。然后我们使用正则表达式替换这个字符串中的空白字符,得到一个新的字符串。但是,这个新的字符串只是一个临时变量,它不会影响原始列表 a 中的值。因此,列表 a 保持不变。
然而,在处理列表 b 时,我们遍历 b 的每个子列表 i,并针对每个子列表中的字符串执行相同的正则表达式替换。但这里的关键区别是,我们将结果直接分配给子列表 i 的元素(i[j])。这意味着我们实际上是修改了原始列表 b 的值,因此 b 会随着遍历值的变化而变化。
简而言之,a 中的遍历值变了,但列表 a 保持不变,因为我们没有在原始列表中替换字符串。而在 b 中,我们直接修改了子列表的元素,导致 b 的遍历值和列表本身都发生了变化。
你把第一个改成 for i in range(3): 然后像第二个那样用索引来引用,a也会改变。或者把第二个改成 for j in i: 再看看。
b是一个二维列表,遍历b和遍历一维列表时,给 i 赋值的内容是不一样的。一维列表时,i 赋值的是列表元素,二维列表时,i 赋值的是内层列表的内存地址,所以修改了 i,b也会看起来不一样,因为他们都指向同一个内存地址。
在其他编程语言中可以使用异或运算的方式来实现交换两个变量的值,但是Python中有更为简单明了的做法。
方法一:
a = a ^ b
b = a ^ b
a = a ^ b
方法二:
a, b = b, a
Python字节码指令中有ROT_TWO指令来支持这个操作,类似的还有ROT_THREE,对于3个以上的元素,如a, b, c, d = b, c, d, a,才会用到创建元组和元组解包。想知道你的代码对应的字节码指令,可以使用Python标准库中dis模块的dis函数来反汇编你的Python代码。