1、列表的格式
list与其他语言的数组相似,基础数据类型,可以存储各种数据类型,可以存储大量的数据,
32位python可以存储2的29次方个元素,即536870912个元素,64位python的限制是2的60次方-1即1152921504606846975个元素。而且列表是有序的,有索引值,可切片,方便取值。
Python的列表中可以存储不同类型的元素。
# L1 = ['a', 123, True, (1, 2, 3, 'aaa'), [1, 2, 3, '小明', ], {'name': 'Tom'}]

例如:列出所有文件的后缀名
用for和while两种方法实现
file_list = ['01.txt', '02.doc', '03.py']
for temp in file_list:
index = temp.rfind('.')
print(temp[index:])

列表元素的增删改查
2、增加有三种方式:append、insert 、extend
L1 = ['Tom', 'Jack', 'Mike', 'LiLei']

2.1 append列表最后面追加
L1.append('HanMeimei')
print(L1.append('HanMeimei'))
print(L1)
结果:['Tom', 'Jack', 'Mike', 'LiLei','HanMeimei']

2.2 insert 在指定下标的位置上插入
L1.insert(1,'Rose')
print(L1)
结果:['Tom', 'Rose', 'Jack', 'Mike', 'LiLei']

2.3 extend() 两个列表迭代的追加,将另一个列表中的元素逐一添加到列表中,与append不同,append是把列表b整体追加到列表a后面,而extend是把列表b中的元素逐个追加到列表a后面。
L1.extend('abc')
print(L1)
结果:['Tom', 'Jack', 'Mike', 'LiLei', 'a', 'b', 'c']

L1.extend(['abc', 'erf'])
print(L1)
结果:['Tom', 'Jack', 'Mike', 'LiLei', 'abc', 'erf']

3、删除有三种方法:del、pop、remove

3.1 del:根据下标进行删除
L1 = ['Tom', 'Jack', 'Mike', 'Rose', 'LiLei','HanMeimei']
del L1[1]
print(L1)
['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']

按照切片(步长)
del L1[:2]
print(L1)
['Mike', 'Rose', 'LiLei', 'HanMeimei']

del L1[::2]
print(L1)
['Jack', 'Rose', 'HanMeimei']

3.2 pop:当pop()内指定下标时,可以删除指定元素,如果不指定下标默认删除最后一个元素
L1 = ['Tom', 'Jack', 'Mike', 'Rose', 'LiLei','HanMeimei']
L1.pop(1)
print(L1)
['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']

3.3 remove:根据元素的值进行删除
['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']
L1.remove('Jack')
print(L1)
['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']

4、修改元素
['Tom', 'Mike', 'Rose', 'LiLei', 'HanMeimei']
4.1 按照索引修改
L1[1] = 'XiaoMing'
print(L1)
['Tom', 'XiaoMing', 'Rose', 'LiLei', 'HanMeimei']

4.2 按照切片修改,如果不加步长,则字符串个数可以不限制,比如修改前2个字符,后面赋值可以是多个字符
L1[:2] = ['a','b','c','d']
print(L1)
['a', 'b', 'c', 'd', 'Rose', 'LiLei', 'HanMeimei']

4.3 加上步长就一定要一一对应,也就是说按照每隔2个字符取值最终能取到3个字符,那么赋值的时候也必须要赋3个值,否则会报错
L1[::2] = 'abc'
print(L1)
['a', 'Mike', 'b', 'LiLei', 'c']

5、查找元素
5.1、通过索引,切片,切片(步长)进行列表查询。(与字符串一样)
切片的语法:【起始:结束:步长】

注意:选取的区间属于左闭右开型,即从“起始”位开始,到“结束”位的前一位结束(不包含结束位本身)。

取一个list或tuple的部分元素:
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
L[0:3]
['Michael', 'Sarah', 'Tracy']
#L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。

如果第一个索引是0,还可以省略:
L[:3]
['Michael', 'Sarah', 'Tracy']

也可以从索引1开始,取出2个元素出来:
L[1:3]
['Sarah', 'Tracy']

L[-1]取倒数第一个元素,那么它同样支持倒数切片,记住倒数第一个元素的索引是-1。
L[-2:]
['Bob', 'Jack']
L[-2:-1]
['Bob']

切片操作十分有用。我们先创建一个0-9的数列:
L = list(range(10))
L
[0, 1, 2, 3, ..., 9]

可以通过切片轻松取出某一段数列。比如前10个数:
print(l[:5])
[0, 1, 2, 3, 4]

print(l[-1::-1])
print(l[::-1])
[9,8,7,6,5,4,3,2,1,0]

后5个数:
print(l[-5:])
[5, 6, 7, 8, 9]

前2-4个数:
print(l[2:5])
[2, 3, 4]

前6个数,每两个取一个:
print(l[:6:2])
[0, 2, 4]

所有数,每2个取一个:
print(l[::2])
[0, 2, 4, 6, 8]

什么都不写,只写[:]就可以原样复制一个list:
print(l[:])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
print((0, 1, 2, 3, 4, 5)[:3])
(0, 1, 2)

字符串'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
'ABCDEFG'[:3]
'ABC'
'ABCDEFG'[::2]
'ACEG'

5.2、通过for循环进行查询
for i in L1:
    print(i)

6、补充:index()、len()、count()、sort()、reverse()、
6.1、通过元素查索引
print(L1.index('LiLei'))
3

6.2、通过len()查列表的长度
print(len(L1))
5

6.3、通过count()查某元素在列表中的个数
print(L1.count('Tom'))
1

6.4、从小到大排序
L1 = [2, 3, 5, 1, 9, 8, 7, 6]
L1.sort()
print(L1)
[1, 2, 3, 5, 6, 7, 8, 9]

6.5、从大到小排序
L1.sort(reverse=True)
[9, 8, 7, 6, 5, 3, 2, 1]

6.6列表元素顺序翻转
L1.reverse()
print(L1)
[6, 7, 8, 9, 1, 5, 3, 2]

6.7、sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
list = [1,3,5,-10,12,-15]
result = sorted(list,key=abs)
print result
[1, 3, 5, -10, 12, -15]

我们再看一个字符串排序的例子:
sorted(['bob', 'about', 'Zoo', 'Credit'])
['Credit', 'Zoo', 'about', 'bob']

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果大写字母Z会排在小写字母a的前面。现在,我们提出排序应该忽略大小写,按照字母序排序。用一个key函数把字符串映射为忽略大小写排序即可。我们给sorted传入key函数,即可实现忽略大小写的排序:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

7、例子:

在正向循环一个list时,如果改变了列表的大小,那么结果可能和你预想的不一样。
L1 = [11, 22, 33, 44, 55, 66]
将索引为奇数位置的元素删除。
第一种:切片

 del L1[1::2]
print(L1)
[11, 33, 55]

第二种:for循环会报错,因为在删除过程中列表长度会改变

 for ind in range(len(L1)):
if ind % 2 == 1:
del L1[ind]
print(L1)

结果:IndexError: list assignment index out of range

第三种:倒叙删除,因为len(L1)为6,我们要从最后一个下标为5的值开始取,所以要从len(L1)-1开始,最后要取到下标为0,而如果写成0则取不到,所以要写成-1

 for ind in range(len(L1)-1, -1, -1):
if ind % 2 == 1:
del L1[ind]
print(L1)

[11, 33, 55]

day09-列表的更多相关文章

  1. DAY09、函数

    一.函数的定义:跟变量名的定义大同小异 1.声明函数的关键词:def 2.函数(变量)名:使用函数的依据 3.参数列表:()   参数个数可以为0到n个,但()一定不能丢,完成功能的必要条件 4.函数 ...

  2. Python异常处理和进程线程-day09

    写在前面 上课第九天,打卡: 最坏的结果,不过是大器晚成: 一.异常处理 - 1.语法错误导致的异常 - 这种错误,根本过不了python解释器的语法检测,必须在程序运行前就修正: - 2.逻辑上的异 ...

  3. python开发学习-day09(队列、多路IO阻塞、堡垒机模块、mysql操作模块)

    s12-20160312-day09 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  4. 学习日常笔记<day09>Http协议

    1 Http协议入门 1.1 什么是http协议 http协议: 对浏览器客户端 和  服务器端 之间数据传输的格式规范 1.2 查看http协议的工具 1)使用火狐的firebug插件(右键-> ...

  5. day09 python函数 返回值 参数

    day09 python   一.函数     1.函数         函数是对功能的封装         语法:         定义函数:             def 函数名(形参):    ...

  6. Python学习day09 - Python进阶(3)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  7. 358 day09字节流、字符流

    day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 [ ] 能够说出IO流的分类和功能 [ ] 能够使用字节输出流写出数据到文件 [ ] 能够使用 ...

  8. day09 orm查询优化相关

    day09 orm查询优化相关 今日内容概要 orm字段相关补充 orm查询优化相关 orm事务操作 图书管理系统练习 今日内容详细 orm事务操作 """ 事务:ACI ...

  9. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  10. ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑

    前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作. 先看一下列表: 接下来我们有很多事情可以做. 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化 # ...

随机推荐

  1. Mina2 udp--zhengli

    一.包与类名. 1.所有类和方法严格使用驼峰法命名.例:SSLFilter 更名为 SslFilter.NIO传输类在命名时增加 Nio 前缀.因为NIO 并不是 socket/datagram 传输 ...

  2. Python——字符串(python programming)

    p ython——字符串 ①加法 连接两个字符串 ②乘法  复制字符串 python——转义字符 \n 换行 \' 单引号 \'' 双引号 \\ 反斜杠 raw字符串:无视转义字符   转义: 字符串 ...

  3. Scrapy学习篇(七)之Item Pipeline

    在之前的Scrapy学习篇(四)之数据的存储的章节中,我们其实已经使用了Item Pipeline,那一章节主要的目的是形成一个笼统的认识,知道scrapy能干些什么,但是,为了形成一个更加全面的体系 ...

  4. 去中心化存储的QoS是什么?

    我的前面一篇文章讲到如何做去中化存储,文其中提到了QoS (Quality of Service),那么QoS是什么?为什么QoS那么重要?下面将详细描述. 什么是QoS? 提到QoS,就要先了解Qo ...

  5. [UE4]增加机器人

    一.新增蓝图继承自Shooter名为AIShooter.玩家角色也是继承自Shooter. 二.使用AIMoveTo追踪玩家.玩家控制的角色调用这个方法没反应. 三.关卡中添加组件NavMeshBou ...

  6. vue2.0-组件传值

    父组件给子组件传值,子组件用props接收 例子:两个组件,一个是父组件标签名是parent,一个是子组件标签名是child,并且child组件嵌套在父组件parent里,大概的需求是:我们子组件里需 ...

  7. 过滤器Filter的四种拦截方式

    过滤器有四种拦截方式!分别是:REQUEST.FORWARD.INCLUDE.ERROR. REQUEST: 直接访问目标资源时执行过滤器.包括:在地址栏中直接访问.表单提交.超链接.重定向,只要在地 ...

  8. cocos源码分析--RenderTexture

    cocos中RenderTexture主要用来实现截屏,然后把截取出来的图片保存到磁盘中,除了保存图片和渲染纹理,它还可以得到一些预渲染结果,并将这些结果作为一种纹理数据. 例如我们可以用RGB5_A ...

  9. 用vlan实现同一网段的的各部门之间有的可以通信有的不可以通信

    日前老师上课演示一个项目:实现公司同一网段的各个部门之间有的可以通信有的无法通信.我们用的是思科测试软件模拟操作,个人觉得很好用.       在刚开始做这个项目的时候我以为端口是对应的,如图,交换机 ...

  10. Android最新版支付宝支付集成

    上次集成支付宝支付已经很久了,今天写东西用到了支付宝支付,就大致写一下流程: 去蚂蚁金服下载最新版的Android&IOS端SDK 全部文档 -- 资源下载 -- App支付客户端 下载后解压 ...