类似C语言中的列表用法

--------------------------------------------------------------------------------------------------------------

创建:列表使用中括号表示,内部元素使用逗号隔开,元素的数据类型允许不一致,允许多层嵌套

names = ['Tom',"Lily",'Eric']

infos = ['Hello',5,[5.6,'BYE']]

访问:利用列表的[下标 ]访问单个元素,第一个元素的下标是0,依次加1;也可从最后一个元素访问,下标是-1,依次减1

若下标出界,则报错IndexError: list index out of range

>>> names[0]

'Tom'
 
>>> names[2]
'Eric'
 
>>> names[-1] #访问最后一个元素(倒数第一个元素)
'Eric'
 
>>> names[-2#访问倒数第二个元素
'Lily'
 
>>> infos[2][1] #访问多层列表
'BYE'
 

追加:在原有的列表末尾追加一个或者多个

 >>> names

  1. ['Tom', 'Lily', 'Eric']
  2. >>> names.append("Rain") #在末尾添加一个元素使用append()
  3. >>> names
  4. ['Tom', 'Lily', 'Eric', 'Rain']
  1. >>> names.expend(['Peter', 'Amy']) #在末尾添加多个元素使用expend()
  1. >>> names
  2. ['Tom', 'Lily', 'Eric', 'Rain''Peter', 'Amy']
 
切片:与访问单个元素不同的是,切片可一下子访问多个元素
  1. >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
  2. >>> names[1:4] #取下标1至下标4之间的值,包括1,不包括4
  3. ['Lily', 'Eric', 'Rain']
  4. >>> names[1:-1] #取下标1至-1的值,不包括-1
  5. ['Lily', 'Eric', 'Rain', 'Peter']
  6. >>> names[0:3] #取开头到下标3之间的值,不包括3
    ['Tom', 'Lily', 'Eric']
  1. >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
  2. ['Tom', 'Lily', 'Eric']
  3. >>> names[3:] #如果想取最后一个,不能写-1,只能这么写
  4. ['Rain', 'Peter', 'Amy']
  5.  
  6. 切片默认的步长为1,意思是下标值递增1取值;也可自行设置步长[start:end:步长]
  7. >>> names[1:5:2] #取下标值为1,3 的值
  8. ['Lily', 'Rain']
  1. >>> names[::2] #表示从开头的下标值开始加2取
    ['Tom', 'Eric', 'Peter']

插入,使用list.insert(位置,元素)将需要添加的元素插入到目标列表的下标位置处

  1. >>> names
  1. ['Tom', 'Lily', 'Eric', 'Rain', 'Peter', 'Amy']
  1. >>> names.insert(2,'p2')
    ['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']
  2.  
  3. >>> names.insert(0,'start')
    ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']
  4.  
  5. >>> names.insert(-1,'end')#本意是插入到最后一个,但是结果不对
    ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'end', 'Amy']

修改:直接将元素重新赋值即可

  1. >>> names
     ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'end', 'Amy']
  1. >>>names[-2] = '该换人了'
  1. ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']

删除:有三种删除方法,del、remov()和pop(),示例如下

 

  1. >>>names
  1. ['start', 'Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']
  2.  
  3. 1. del list[index] 用下标值index删除
  1. >>> del names[0]
    ['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', '该换人了', 'Amy']
  2.  
  3. >>> del names[6]
    ['Tom', 'Lily', 'p2', 'Eric', 'Rain', 'Peter', 'Amy']
  4.  
  5. del names[]表示删除names列表
  6.  
  7. 2.list.remove(value)用元素值删除

    >>> names.remove('p2')
    ['Tom', 'Lily', 'Eric', 'Rain', 'Peter', 'Amy']
  1. 3.list.pop(index) 用下标值index删除,若省略则删除最后一个元素
  1. >>> names.pop()#不写下标值删除最后一个
    ['Tom', 'Lily', 'Eric', 'Rain', 'Peter']
  2.  
  3. >>>names.pop(1)
    ['Tom', 'Eric', 'Rain', 'Peter']

 统计:使用list.count(value)统计列表中元素值value出现的次数

  1. >>> names2 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom',1,2,3]
    >>> names2.count('Tom')
    2

翻转:list.reverse()基于当前列表将元素排列顺序翻转(不生成新列表)

  1. >>> names2 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom',1,2,3]
    >>> names2.reverse()
    [3, 2, 1, 'Tom', 'Tom2', '_Peter', '3Rain', 'Eric', 'Tom']

排序:list.sort()将列表元素值首字母的ASCII码或者数值升序(默认)或者降序排列

若有元素数据类型不一致会出现报错例如:TypeError: '<' not supported between instances of 'str' and 'int'

  1. >>> names3 = ['Tom', 'Eric', '3Rain', '_Peter','Tom2','Tom','1','2','3']
    >>> names3.sort()
    >>> names3
    ['1', '2', '3', '3Rain', 'Eric', 'Tom', 'Tom', 'Tom2', '_Peter']
  1. >>> nums = [1,2.6,3,56,89,-1]
    >>> nums.sort()
    >>> nums
    [-1, 1, 2.6, 3, 56, 89]
  2.  
  3. 也可使用list.sort(reverse = True)进行降序排列
  4.  
  5. 获取下标:list.index[value]返回列表中第一个元素值为value的下标
  1. >>> names2
    [3, 2, 1, 'Tom', 'Tom2', '_Peter', '3Rain', 'Eric', 'Tom']
    >>> names2.index('Tom')
    3
  1. 复制列表

1. 使用“=”直接复制出另一个列表,不过这两个列表指向同一个对象,改变任何一个列表的元素值均会影响另一个,包括一维、多维里的元素

  1. >>>infos1 = infos
    >>>print(infos,infos1)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos1)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', 'world', [5.6, 'BUPT']]

此方法并不是严格意义上的复制,只是新建了一个对象指向了原来的空间

2. 工厂函数,会改变多维元素,一维元素不改变

  1. >>>infos2 = infos
    >>>print(infos,infos2)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos2)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', , [5.6, 'BUPT']]
  2.  
  3. 中间的列表是单独分配了一块空间,然后从第一层列表中去引用地址,复制的info2也是引用的地址,所以真实的值一变,两个列表的内部列表的值也就变了

3. 使用list.copy()进行浅复制

  1. >>>infos3 = infos.copy()
    >>>print(infos,infos3)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos3)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', , [5.6, 'BUPT']]
  2.  
  3. 可见,此方法与方法2工厂函数复制的结果一样
  4.  
  5. 4.调用copy模块进行浅复制
  1. >>>infos4 = copy.copy(infos)
    >>>print(infos,infos3)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos4)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', , [5.6, 'BUPT']]
  1. 可见,此方法与方法2工厂函数复制的结果一样
  1. 5.调用copy模块进行深复制
  1. >>>infos5 = copy.deepcopy(infos)
    >>>print(infos,infos5)
    ['Hello', 5, [5.6, 'BYE']] ['Hello', 5, [5.6, 'BYE']]
    >>>infos[1] = 'world'
    >>>infos[2][1] = 'BUPT'
    >>>print(infos,infos5)
    ['Hello', 'world', [5.6, 'BUPT']] ['Hello', , [5.6, 'BYE']]
  2.  
  3. 由此可见,只有这种方法做到了完全复制出了另一个独立的列表
  4.  
  5. 小结:
    用=生成的列表只是指向了同一个空间,相当于同一个空间有两个列表名字而已
    浅复制实现有三种:工厂函数[:]、copy方法和调用copy模块浅复制,运行结果是第一维元素复制出来是独立的,第二维等多维元素列表公用了同一个空间
    完全独立复制就只能使用copy模块里的深复制了
  6.  
  7. 列表拼接
    与字符串类似,可以使用加号+进行拼接(注意不是元素值相加),使用乘号*复制自身若干次
  1. >>>list1 = [1,2,3]
    >>>list2 = [1,3,5]
    >>>list3 = list1 + list2
    [1, 2, 3, 1, 3, 5]
    >>>list4 = list1*3
    [1, 2, 3, 1, 2, 3, 1, 2, 3]
  1. 当然,expan()方法也能实现,并且显得更为专业
  2.  
  3. 列表比大小
    默认从第一个元素开始比较其对应的ASCII码的大小,只要有一个pk赢了就代表整个列表赢了
  1. >>>list1 < list2
    False
  2.  
  3. 判断元素是否存在
  1. in not in,注意只能在当前维度进行判断
  1. >>>infos
    ['Hello', 'world', [5.6, 'BUPT']]
    >>>'Hello' in infos
    True
    >>>5.6 in infos
    False
    >>>5.6 in infos[2]
    True
  1.  

Python3中的列表用法,看这一篇就够了的更多相关文章

  1. Java中的多线程=你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  2. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  3. 鸿蒙应用程序Ability(能力)看这一篇就够

    本节概述 什么是Ability Ability分类 Ability生命周期 Ability之间跳转 什么是Ability Ability意为能力,是HarmonyOS应用程序提供的抽象功能.在Andr ...

  4. JVM内存模型你只要看这一篇就够了

    JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...

  5. 【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

  6. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  7. 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了

    title author date CreateTime categories win10 uwp win2d 入门 看这一篇就够了 lindexi 2019-5-25 20:0:52 +0800 2 ...

  8. windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看

    windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...

  9. 什么是 DevOps?看这一篇就够了!

    本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...

随机推荐

  1. 小试OKR一季度之后有感分享,你要不要试试ORK?

    封面 OKR已经在国内热火朝天有一阵子了,为了适当的赶时髦,从年初开始团队内部小范围使用ORK模式以便测试团队会有什么化学反应.这篇文章打算写写心得感受,供大家围观产考. 老一套先摆一下概念 OKR( ...

  2. java中key值可以重复的map:IdentityHashMap

    在Java中,有一种key值可以重复的map,就是IdentityHashMap.在IdentityHashMap中,判断两个键值k1和 k2相等的条件是 k1 == k2 .在正常的Map 实现(如 ...

  3. <linux下extmail服务的搭建>

    下载2个软件包: extmail-1.1.0.tar.gz     extman-1.1.tar.gz 下载地址:http://www.cpan.org/ 创建extsuite目录 mkdir /va ...

  4. ASP.NET MVC CheckBoxFor为什么会生成hidden input控件

    自己开发的公众号,可以领取淘宝内部优惠券 @Html.CheckBoxFor(m => m.Bool) 使用CheckBoxFor方法得到的html代码会是下面这个样子 <input ch ...

  5. CentOS6.5 环境安装配置

    一.GO环境配置 1.运行命令进入/usr/local/src目录:cd /usr/local/src 2.下载安装包:运行wget --no-check-certificate https://st ...

  6. 创建有输出参数的存储过程并在c#中实现DataGridView分页功能

    不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...

  7. 【踩坑】vue 无法让后台保存 session

    今天在调试 iblog 客户端时,发现登录后进行增加.删除.更新操作时都提示还没有登录. 此问题曾经在用 ajax 调试时出现过,解决办法是,在请求时带上 creditials: true ,即让发出 ...

  8. 动态页面技术----JSP技术

    1995年java诞生,没有jsp,只有Servlet, Servlet开发:Servlet上嵌套html代码,非常繁琐. 1998年,出现jsp,方便写html代码,并且可以在html代码中嵌套ja ...

  9. Eucalyptus管理页面密码设置

    桉树环境什么的都已经是配置好了的,但是过了一段时间不用,也不知道密码是什么了,看着下面的页面也不知道如何进去,这里我们通过命令行的方式重置用户名和密码信息. 登陆clc所在机器,输入下命令: euar ...

  10. Eucalyptus(v4.0)系统需求

    1.计算需求 Physical Machines: All Eucalyptus components must be installed on physical machines, not virt ...