继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python 列表

噜噜哒
关注TA
已关注
手记 74
粉丝 8
获赞 24

Python 列表
Python的列表对象是这个语言提供的最通用的序列.列表是一个任意类型的对象的位置相关的有序集合,没有固定大小.不像字符串,其大小是可变的,通过对偏移量进行赋值及其各种方法进行调用,确实能够修改列表的大小
1.序列操作
列表是序列的一种,支持所有对字符串讨论过的操作,唯一区别是其结果是列表
例如:一个有三个元素的列表
L=[123,’spam’,1.23]
len(L)
3
对列表可以进行索引,切片等操作,如之前的字符串那样
L[0]
123

L[:-1]
[123,’spam’]

L+[4,5,,6]
[123, ’spam’, 1.23, 4, 5, 6]

L
[123,’spam’,1.23]

2.特定类型的操作
列表类似其他语言的数组,但要强大的多,其中一个方面是,列表没有固定类型的约束(如上述例子中列表包含三个完全不同类型的对象,一个整数,一个字符串,一个浮点数),列表没有固定大小,能够按照需要增加或减少列表大小,来影响其特定的操作.
L.append(‘NI’)
L
[123,’spam’,1.23,’NI’]

L.pop(2)
1.23

L
[123,’spam’,’NI’]

append方法扩充列表大小并在列表末尾插入一项;
pop方法(或者等效的del语句)移除给定偏移量的一项,从而让列表减小;
其他的列表方法可以在任意位置插入(insert)元素,按照值移除(remove)元素
大多数列表的方法都会就地改变列表对象,而不是创建一个新列表:
M=[‘bb’,’cc’,’aa’]
M.sort()
M
[‘aa’,’bb’,’cc’]

M.reverse()
M
[‘cc’,’bb’,’aa’]

这里的列表sort方法默认按升序对列表排序
而reverse方法对列表进行反转
都是直接对列表进行改变
3.边界检查
Python不允许不存在的元素,超出列表之外的索引会导致错误,对列表末尾范围之外进行赋值也是错误的
L
[123,’spam’,’NI’]
L[99]
...error..

L[99]=1
...error...
在python中,并不是默默地增大列表作为响应,而是会提示错误,要增大列表,可调用append方法

4.嵌套
特性:支持任意嵌套
例如:能够让一个列表包含一个字典,并在这个字典中包含另一个列表,特性的直接应用就是实现矩阵,或python中的多维数组
M=[[1,2,3],
[4,5,6],
[7,8,9]]
M
[[1,2,3],[4,5,6],[7,8,9]]
其效果实现3*3的数字矩阵,可通过多种方法获取元素
M[1]     读取整个第二行
[4,5,6]

M[1][2]   读取第二行的第三个元素
6
串联起索引操作可以逐层深入的获取嵌套的对象结构(这种矩阵结构适用于小规模任务,对于大型结构,可以使用NumPy)
5.列表解析
通过对序列中的每一项运行一个表达式来创建一个新的列表的方法,每次一个,从左至右.列表解析是编写在方括号中的(),并且由使用同一个变量名的(这里是row)表达式和循环结构组成

>> m=[[1,2,3],[4,5,6],[7,8,9]]
>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>> col2=[row[1] for row in m]    
>> col2
[2, 5, 8]
>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

意思是:把矩阵m的每个row中的row[1],放在一个新列表中.

实际应用更复杂,如:

>> [row[1]+1 for row in m]
[3, 6, 9]
此操作是把搜集到的(第二列)每个元素都加了1
>> row[1]
8
>> [row[1] for row in m if row[1]%2==0]
[2, 8]
此操作是使用if条件语句,通过使用%求余表达式(取余数)过滤结果中的奇数
>> row[0]
7
>> row
[7, 8, 9]

列表解析创建新的列表作为结果,但是能够在任何可迭代对象上迭代,例如:
使用列表解析区步进坐标的一个应编码列表和一个字符串

>> diag=[m[i][i] for i in [0,1,2]]      (从矩阵中收集对角线)
>> diag
[1, 5, 9]
>> doubles=[c*2 for c in 'spam']   (在一个字符串中重复字符)
>> doubles
['ss', 'pp', 'aa', 'mm']

内置sum函数,按一种顺序汇总各项

>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>> G = (sum(row) for row in m)
>> next(G)
6
>> next(G)
15
>> next(G)
24

括号中的解析语法也可以用来创建产生所需结果的生成器(用内置函数map产生对各项运行一个函数的结果)

>> list(map(sum,m))
[6, 15, 24]

解析语法也可以用来创建集合和字典:

>> {sum(row) for row in m}
set([24, 6, 15])
>> {i:sum(m[i]) for i in range(3)}
{0: 6, 1: 15, 2: 24}

L列表,集合和字典都可以用解析来创建:

>> [ord(x) for x in 'spam']
[115, 112, 97, 109]
>> {ord(x) for x in 'spam'}
set([112, 97, 115, 109])
>> [ord(x) for x in 'spaam']
[115, 112, 97, 97, 109]
>> {ord(x) for x in 'spaam'}
set([112, 97, 115, 109])
>> {x:ord(x) for x in 'spaam'}
{'a': 97, 'p': 112, 's': 115, 'm': 109}

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP