#少儿编程#

Python列表是一种有顺序(ordered)的集合,每个元素都有一个位置,这个位置就是索引。列表中的元素位置是固定的,也就是说你每次访问这个列表,它的元素位置都不会变,除非用insert()、remove()等操作来改变列表。

不过,列表的顺序有可能并不是你真正需要的,或者说不是你这次需要的,有的时候你希望列表在使用前能按照你的需求先排个序,比如数字从小到大排序,字母按序排列。

sort( )方法排序

sort()会自动按照字母或数字从小到大的顺序排序。图1是将字母排序:

图1

代码①,对列表letters执行sort()方法,列表letters里的所有数据都会按照字母从小到大的顺序重新排序。

代码②,在执行过sort()方法后,打印列表letters,会看到列表letters里的值顺序已经和开始的不一样了,执行sort()方法后,列表letters里的值按从小到大的顺序重新排序了。

这是从小到大的顺序,但如果我们想从大到小逆序排列呢?我们只需在sort()函数里对带上参数reverse=True就可以了,见图2:

图2

代码①:对列表letters执行sort(revers=True)方法,列表letters里的所有数据都会按照字母从大到小的顺序重新排序。

特别强调:

sort()会对原列表进行修改,也就是说这个方法会改变原始列表,而不是创建一个新的有序列表。如果你想保留原来的顺序,只对列表的副本进行排序的话,可以使用另一种排序方法sorted()。

sorted( )方法排序

sorted()方法是对列表创建一个有序副本,这样不会影响原列表的顺序。见图3:

图3

代码① new_fruits=sorted(fruits):使用sorted()方法对列表fruits创建一个有序副本,并将这个有序副本列表赋值给变量new_fruits。

代码②:打印列表fruits,我们可以看到,列表fruits的值没有变化,还跟最初一样。

代码③:打印列表new_fruits,这个列表就是重新排过序的列表。

【特别强调:列表的副本问题】

关于使用sort()方法排序,我们都知道这种方法是对原列表做出修改,也就是说使用sort()方法排序后,列表各元素的位置就发生了变化,和原有的不一样了。如果想保留列表原有的顺序,对排过序的列表另外创建一个副本。

那有的小朋友可能会说了,可不可以先把这个列表赋值给一个变量,然后再对新赋值的那个列表排序呢?如图4:

图4

我们先创建了一个列表original,值为[4,5,3,2]。然后创建一个列表new,让它等于original,new=original(图4中的代码①)。之后我们print(new),可以看到列表new的值和列表original的值是一样的。

如果这时我们对列表new进行排序,会出现什么情况呢?见图5:

图5

我们会发现,当对列表new进行排序后(代码①new.sort()),不仅列表new的值发生了变化,就连original的值也跟着发生了变化。分别打印列表new(代码②)和列表original(代码③),我们看到两个列表都排序了,而不是只有我们以为的只有列表new排序了。

这是为什么呢?

① 当程序执行original=[4,5,3,2],实际上就是为[4,5,3,2]指定一个名字original,如图6。

图6

② 当我们执行new = original语句,其实就是为[4,5,3,2]指定另一个名字new,所以列表original和列表new实际上表示的是同一个列表,即使用这种方式不论指定多少个名字,其实列表始终都只有一个。如图7:

图7

③ 由于列表original和列表new指的是同一个列表,所以使用sort()方法对列表new排序,实际上值也影响original,毕竟他们指的是同一个列表。如图8:

图8

那如何解决我们想创建列表副本的需要呢?

最容易的方法是使用分片记法,如图9:

图9

代码① new_list = original_list[:],使用的就是分片记法,表示复制列表original_list中所有内容到列表new_list,从第一个元素到最后一个元素。执行print(new_list),可以看到列表new_list的值和列表original_list的值是一样的,但是这样得到的是两个列表,new_list是original_list的副本。见图10:

图10

然后我们对new_list排序,执行代码② new_list.sort()后,再分别打印new_list和original_list两个列表,会发现只有new_list排序了,original_list还是原样,也能为这已经是两个列表了,所以其中任意一个列表执行sort()操作,都不会影响另外一个。见图11:

图11

注意:

要特别说明的是,字典也存在和列表同样的问题,就是不能用等号创建副本。但假如这种操作发生在字符串或者数字类型呢?

如图12:

图12

先将“王老师”这个字符串赋值给变量myTeacher(代码①),然后执行yourTeacher=myTeacher,这时yourTeacher和myTeacher两个变量的值一样。其实就是一个内容有两个名字标签,如图13:

图13

但当我们修改myTeacher的值,将它的值改为“李老师”。实际上就相当于将名字标签myTeacher贴到“李老师”上,所以变量myTeacher的值是“李老师”,而变量yourTeacher的值不变,还是“王老师”。如图14:

图14

好了,你们搞清楚了吗?Python的排序以及列表副本的问题。

原创不易,请勿抄袭。欢迎大家关注我,和我多交流,如果你喜欢,请转赞评三连,谢谢。

python创建列表副本_Python编程15:Python列表的排序和列表的副本相关推荐

  1. python合并列表重新排序_python实现的合并两个排序的列表

    python实现的将两个排好序的列表进行排序: #!/usr/bin/python def megre(A, p, q, r): n1 = q - p + 1 n2 = r - q L = [None ...

  2. python 累积正态分布函数_Python编程基础—Python语句书写规范

    Python语句中没有专门的"结束符". Python解释器不是根据"结束符"来判断语句是否结束,而是根据语法的完整性来判断. 一.Python语句编写规则 ① ...

  3. python 清空所有对象_Python编程思想(7):列表的增删改操作

    李宁老师已经在「极客起源」 微信公众号推出<Python编程思想>电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法.读者可以在「极客起源」 公众号中输入 160 ...

  4. python教程很详细_Python编程入门教程:从入门到高级,非常详细

    本文的资料和内容是我下载的,觉得非常有用,于是转过来大家瞧瞧: 这里给初学Python的朋友提供一些建议和指导吧.大神请无视, 俗话说:授人以鱼不如授人以渔.所以我这里只是阐述学习过程,并不会直接详细 ...

  5. python开发微信群_Python编程:微信群聊程序的开发与进/线程知识汇总(附代码)

    本文承接上篇文章的客户端-服务器聊天对话程序,进一步设计开发了微信群聊的python模拟程序,涉及的python知识点为:Python实战:聊天软件开发与TCP/Socket编程知识汇总(附代码)和 ...

  6. python输出2000闰年_python编程如何求2000到2500闰年?_后端开发

    python如何编写阶乘?_后端开发 python编写阶乘的方法:首先定义一个递归函数实现求阶乘功能:然后定义一个列表,将for遍历得到的阶乘结果放到列表:最后使用[sum()]函数求和即可. pyt ...

  7. python创建数组类_python创建数组

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! java创建二维数组我门来看看java创建二维数组的格式:type arrayn ...

  8. python解包操作_Python编程使用*解包和itertools.product()求笛卡尔积的方法

    本文实例讲述了Python编程使用*解包和itertools.product()求笛卡尔积的方法.分享给大家供大家参考,具体如下: [问题] 目前有一字符串s = "['a', 'b'],[ ...

  9. python前端界面模板_Python编程flask使用页面模版的方法

    在flask中可以像go和angular那样使用页面模版(template),可以将HTML页面显示进行模版化,通过参数传递与页面进行数据交互. 概要信息 事前准备:flask liumiaocn:f ...

最新文章

  1. python对象复制_Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
  2. css cursor 的可选值(鼠标的各种样式)
  3. linux 系统改名,linux改名命令
  4. linux 创建一个垃圾篓防误删及其误删文件恢复
  5. Theano 中文文档 0.9 - 5.1 Ubuntu安装说明
  6. spark学习-33-Spark安全机制SecurityManager
  7. 机器学习面试-数学基础
  8. 华为鸿蒙重磅更新,华为重磅官宣!鸿蒙系统升级机型遭曝光:多达55款产品支持升级...
  9. 计算机无法安装VC2015,win10 vc++2015一个或多个问题导致了安装失败如何处理
  10. 电商数据分析基础指标体系
  11. GraphQL基金会宣布与联合开发基金会合作推动开源和开放标准
  12. Dm8+jpa整合liquibase框架
  13. 导航栏不变 页面切换 最简单的方法
  14. 用UltraISO轻松制作CentOS 6.7 U盘引导安装盘
  15. robocode调试技巧
  16. Roxio MyDVD(DVD制作软件)v3.0.0.8中文版
  17. 通过bat批处理命令进行adb push批量拉取文件
  18. EDMA 和QDMA 还看不懂,先收藏着
  19. Photoshop 2020 十五大新功能 | 最强一健去背景 + AI 物件选取
  20. js点击图片变化成另一个图片

热门文章

  1. 分级时间轮优化普通时间轮定时器
  2. HTTPS原理与流程
  3. shell之xargs与-exec与管道的区别你造吗?
  4. 【HTML+CSS网页设计与布局 从入门到精通】第13章-块元素div和内联元素span格式布局
  5. python windows系统管理_利用Python脚本管理Windows服务
  6. 网络编程mina介绍
  7. ToolBar组件的使用
  8. c语言中根据数据的组织形式 把文件分为,根据数据的组织形式,C中将文件分为______________和____________.._简答题试题答案...
  9. c语言程序基本设计,C语言程序的设计基本6.ppt
  10. Unity+SenseAR教程 | 用手势发射爱心2:加入发射方向【源码】