
内容短小精悍,方便“食用”。
variables进行赋值,可以将赋值进行交换。同样地,在一个list内部,各元素的值是可以进行交换的,比如我想要将index为0的值与index为4的值进行对调。
下面的例1和例2充分解释了其意思:
例2展示了将list中的0号位与4号位对调,再将1号位和3号位对调,其书写形式是比较容易理解的。除此之外,我们还能用例3的方法得到与例2相同的结果。
首先我们明确一下例2和例3的目的:本质上我们期望的是将list的整个顺序倒置过来,也就是从[10, 1, 8, 3, 5]变成[5, 3, 8, 1, 10]。
例2展示的方法适用于这样简短的list,但假设我们面对的是高达100个元素的list,这样的方法就显得生硬。所以,我们将引入for loop来实现,并将例2的方法融入进去。
小提醒:例3不仅适用于「把[10, 1, 8, 3, 5]变成[5, 3, 8, 1, 10]」这一个例子,而适用于「将list的整个顺序倒置」这一类例子。
从例3的coding「结构」来看,有以下几个关键点:
length//2:用到的整除,这样可以避免整个list内元素个数为奇数 将list的整个顺序倒置,其实就是一步步将list中的元素「首尾」进行交换的过程
理解了以上的点,对例3的方法也就基本掌握了。
在Python入门第一课之数据结构(上)提到一个list.sort() function可以很简便地将lists内的数值进行排序,不过掌握了简单的方法,还是回来看看真正的sorting是如何进行的。
和上面讲「将list的整个顺序倒置,就是将list中的元素首尾进行交换的过程」的思维类似,我们要sort一个list,比如「按数字由小到大的顺序」,本质上其实是将前一个元素和后一个元素的大小进行比较。如果前一值大于后一值,就将其进行对调,以此类推。
简单来说,就是比较各个元素的大小问题。
下面的例1给出list[8, 10, 6, 2, 4],我们用「比较大小」的思维先来分析一下。
真正的运行过程,是从第一个元素开始的,在这个例子中第1个元素是8,我们来看看人脑如何进行由小到大的排序思维过程:
8和10比较,8<10,没得说8还是放在第一位,此时得到的顺序是[8, 10, 6, 2, 4] 10和6比较,10>6,小的要放在前面,所以对调,此时得到的顺序是[8, 6, 10, 2, 4] 10和2比较,10>2,对调,此时得到的顺序是[8, 6, 2,10, 4] 10和4 比较,10>4,对调,此时得到的顺序是[8, 6, 2, 4, 10]
[8, 6, 2, 4, 10]就是我们第1轮通过比较完成的结果,下面的例1就是coding的部分,做的事情和我刚刚用到的「人脑排序思维」一样,只是翻译成了代码。
结合上面的排序思维过程,我们来分析一下例1coding的重点:
(len(my_list) - 1:我们要做4次比较 比较大小和元素交换的结合
刚才我们只进行了1轮的比较,并没有得到所期望的输出,因为第1个元素8并不是最小的值。
下面的例2可达到期望输出。
讲while和for loop的时候提到,while「只要条件成立,循环持续进行」的属性,而for对应的是1个条件的执行,完成后不会重头再来。
所以,为到达期望输出,使用了例2的whileloop,同样的我们来分析一下例2coding的重点:
swapped在code里就像一个“开关”一样,首先它表示的是True,我们可以引申为“开”,那么False就引申为“关”了。 whileloop开始,swapped = False表示「元素交换还没开始,是“关闭”状态」 for loop的前半部分和上面例1一样,唯一不同的就是swapped = True,表示一次交换可以“开始” 接着my_list[i], my_list[i + 1] = my_list[i + 1], my_list[i]就是具体「交换」的部分了 只要swapp = True,就表示可以进行交换,但是当swapp = False时,也就是list内部可以交换的元素都已经进行完毕了,while loop就停止循环,随即输出最后结果
今天的分享就到这里了,感谢学习路上的你我TA!
