1、列表
列表是一种数据类型,顾名思义,他会有多列,像一张表格一样,不过这张表格只有一行,但有多列,他的表现形式是把各种数据类型值放在[]里面并以逗号分隔,里面的数据类型可以是同类型,也可以是不同的类型,例如:
test = ['hello', 3.1415, True, None, 42]
test1 = ['cat', 'bat', 'rat', 'elephant']
列表里面有多列,那怎么去访问这些列呢?列表是有序的,每个元素都会对应一个索引,这个索引的范围为0至len(test)-1之间的整数,例如:
print(test[5])会报错,因为最大索引为len(test)-1 = 4,5已经超出了索引的范围。
既然list可以包括各种数据类型,当然list也可以包括list
除了使用正数作为索引,列表还可以使用负整数做为索引,最后的个元素的索引为-1,倒数第二个元素为-2,依次至第一个元素的索引为-len(test),例如:
2、切片
使用单个索引可以获取一个值,如果要获取多个值呢?只需要指定索引范围,以冒号分隔,并以新的列表返回,形式如下:
list[start_index:end_index]
start_index指定要获取的值的开始位置,end_index指定最后一个值的索引位置,但不包括这个值,例如:
还有一个更加快捷的方式,你可以省略start_index或者end_index,甚至两个都省略,省略start_index,start_index默认被设置为0,省略end_index,end_index会被默认设置为len(list)的长度,如下:
3、计算列表的长度
列表长度的计算是指列表里面含有多少个元素,使用len(list)即可。
4、改变列表某个元素的值
既然可以使用索引来获取某个元素的值,那么要改变这个元素的值也很简单,只需要把元素用索引找出来,当成变量,把值赋给他就可以了,如下:
5、列表连接和复制
+可以把两个列表连接起来,返回一个新列表,*可以用于重复列表很多次
6、从列表中删除元素
删除元素只要在位置前加del,例如:
7、in和not in操作符
in用于判断一个元素是在一个列表内,not in用于判断一个元素不在一个列表内,返回的是boolean值。
8、列表循环
可以用for循环取出列表中的索引和元素,以便于做其他操作,有两种格式:
# 每次for循环的时候,变量都会被赋值于列表中的某个元素值
for 变量名 in list:
对变量做操作
# 先循环得到索引,然后再通过索引得到其值
for i in range(len(list)):
print('索引 ' + str(i) + ' ,值: ' + list[i])
# 使用enumerate函数,enumerate返回当前索引以及这个索引位置的值
for index, item in enumerate(list):
print('索引 ' + str(index) + ' ,值: ' + item)
9、random模块与列表
- random.choice(list):从列表中随机返回一个元素
- random.shuffle(list):对列表重新排序
10、增强操作符
增强操作符实际上是=、-、*、/、%操作的简化,如果你要对变量spam加1,你会写spam=spam+1这段代码,但用 增强操作符会更加简单,spam += 1,等价于spam = spam +1,
所有的增强操作符总结如下:
原操作 |
等价操作 |
spam += 1 |
spam = spam + 1 |
spam -= 1 |
spam = spam -1 |
spam *= 1 |
spam = spam * 1 |
spam /= 1 |
spam = spam / 1 |
spam %= 1 |
spam = spam % 1 |
11、常见列表方法
方法和前面说的函数一样,只不过在调用时要在方法前加上列表名。
- index(arg)
index(arg)返回列表中arg的索引位置,如果在列表中不存在arg这个元素,则会引发错误
- append(arg)和insert(index,arg)
append(arg): 把arg这个元素插入到列表末尾
- insert(index,arg): 在index指定的索引位置插入元素arg
- remove(arg)
remove(arg): 从列表中移出元素arg,如果不存在,则会引发一个错误
- sort(reverse=boolean,key=str.lower)
- sort(reverse=boolean,key=str.lower)
用于对列表排序,但前提是列表中是同种的整数或者字符串类型,不能是其他数据类型,也不能混合数字和字符串类型。默认情况下,是以数字或者字母升序排列的,小写字母排在大写字母之后,不过可以通过以下两个参数更改默认行为:
reverse: True 或者 False,False是默认升序,True是降序
key=str.lower: 忽略字母大小写,按在字母表中的顺序排列
- reverse()
reverse(): 用于反转列表,也就是说,最后一个元素成为列表的第一个元素,倒数第二个元素成为列表的第二个元素,直到第一个元素成为列表的最后一个元素。
12、序列化数据类型
序列化数据类型是指这种类型是有顺序的,常见的序列化数据类型有list、tuple、strings、range()返回的范围对象,针对序列化类型,很多操作都是通用的,比如:索引、切片、for循环、len()、in、not in等。
13、可变数据类型与不可变数据类型
- 可变数据类型:可以针对这种数据类型的值进行增加、删除、改变等操作,list属于可变数据类型。
- 不可变数据类型: 不能对这种数据类型进行增加、删除、改变等操作,除非重新赋值一个新的值,strings、tuple属于不可变数据类型,你不能改变strings、tuple里面的单个值。
14、元组
元组其实和列表基本是一样的,除了三方面:
- 元组是用圆括号括起来的,而列表是用方括号,例如元组(‘a’,’b’,’c’)
- 元组是不可改变的,而列表是可变的
- 单个值的元组需要要加逗号,例如(‘a’,),否则会被当成字符串
元组相对于列表有一个显著的优势,python对元组做了一些优化,速度上较列表要快一些,如果你的数据不可变,尽量使用元组吧。
15、元组与列表的相互转换
- list(): 可把元组转换成列表
- tuple(): 可把列表转换成元组
16、值传递与指针传递
当我们创建一个变量并对其赋值时,实际上我们变量中存储的是一个指针,这个指针是计算机内存中的一个地址,可以使用id(变量名)取得,对于不可变变量,如果改变其值,实际是新创建一个不可变值,把其在内存中的地址赋给这个变量。如果是可变类型,例如list、dict,改变list或者dict本身,变量不会指向新的地址,如下:
对于函数传参来说,尤其要注意,因为函数内可以更改list、dict,如果在传递参数时不希望被函数内部更改,可以使用copy模块,copy模块有两个函数:
- copy.copy(): 浅拷贝,会把list、dict里面的元素赋值给新的变量,但不会复制list、dict里面包括list、dict的情况,适用于list、dict里面只包括不可变数据类型的场景
- copy.deepcopy(): 深拷贝,可以复制list、dict里面包括list、dict的场景,适用于各种场景,包括list、dict里面包括list、dict
原创文章,转载请注明出处:http://www.nwumba.cn/article/12/