赞
踩
列表中的元素是有序存放的,因此可以直接通过索引来访问列表元素。同时列表中的元素是可变的。即不仅列表中的元素值可以修改,列表中的元素个数也是可变的。因此列表中的元素支持修改、添加和删除操作。
格式:列表名【索引】= 新值
1.2.1 append()方法
append()方法是列表专属的方法之一,用来在指定的列表尾部,即当前最后一个元素的后面,追加指定新元素。
语法格式:列表名.append(新元素)
1.2.2 insert()方法
insert()方法允许为新增加的元素指定插入的位置,其中位置用索引表示。
语法格式为:列表名.insert(索引,新元素)
- >>> guests = ['张三','李四','王五','小阿丁']
- >>> guests.insert(0,'小红')
- >>> guests
- ['小红', '张三', '李四', '王五', '小阿丁']
- >>> len(guests)
- 5
注意:列表每次增加的元素可以是任何类型的。
- >>> play1 = ['小阿丁',18]
- >>> play1
- ['小阿丁', 18]
- >>> play1.append(20)
- >>> play1
- ['小阿丁', 18, 20]
- >>> play1.insert(0,'小红')
- >>> play1
- ['小红', '小阿丁', 18, 20]
1.3.1 del命令
语法格式:del 列表名【索引】
- >>> guests
- ['小红', '张三', '李四', '王五', '小阿丁']
- >>> del guests[0]
- >>> guests
- ['张三', '李四', '王五', '小阿丁']
1.3.2 pop()方法
语法格式:列表名.pop(索引) #当缺省指定索引的时候,默认删除最后一个元素
- >>> guests
- ['张三', '李四', '王五', '小阿丁']
- >>> guests.pop(1)
- '李四'
- >>> guests
- ['张三', '王五', '小阿丁']
- >>> guests.pop()
- '小阿丁'
- >>> guests.pop()
- '王五'
可以看出pop()不仅删除了列表中指定元素,而且返回了被删除的指定元素,这可以供后续使用。
1.3.3 remove()方法
语法格式:列表名.remove(元素值)
- >>> guests
- ['小红', '张三', '李四', '张三', '小阿丁']
- >>> guests.remove('李四')
- >>> guests
- ['小红', '张三', '张三', '小阿丁']
- >>> guests.remove('张三')
- >>> guests
- ['小红', '张三', '小阿丁']
可以看出,当列表中有相同值时,remove()方法删除的是列表中排在最前面的待删除的元素。
2.1 常用函数
- len() #统计和返回指定列表的长度
- in() not in() #判断指定元素是否在列表中
- index() #在列表中那个查找指定的元素,若存在则返回指定元素在列表中的索引,若存在多个则返回最小的,若不存在会报错
- count() #统计并返回列表中指定元素的个数
- >>> guests = ['张三','李四','王五','小阿丁']
- >>> '小阿丁' in guests
- True
- >>> '小红' in guests
- False
- >>> '小红' not in guests
- True
- >>>
- >>> len(guests)
- 4
- >>> guests.index('小阿丁')
- 3
- >>> guests.count('小阿丁')
- 1
- >>> guests.count('小红')
- 0
2.2 操作列表函数
- sort() #列表元素从小到大升序排序,改变了源列表的元素的顺序
- sorted() #列表元素从小到大升序排序,生成排序后的副本,不改变原列表的顺序
注意:sort()方法排序是基于ord()函数得到的编码值进行的。对于数字和英文字符排序,结果是确定的,但是处理中文的时候就有些复杂,因为中文通常会有拼音和笔画两种排序方式,而不同的字符集或采用拼音排序,或采用笔画排序,或采用偏旁部首排序,或混合多种排序方式,从而使得sort()方法对中文的排序结果和预判结果发生偏差。至于如何解决,我会在后面给出。
同时sort()不仅可以升序也可以降序,但是需要增加一个参数,如下图:
sort()方法格式:列表.sort()
- >>> nums = [9,3,8,2,1]
- >>> nums.sort()
- >>> nums
- [1, 2, 3, 8, 9]
- >>> nums.sort(reverse = True)
- >>> nums
- [9, 8, 3, 2, 1]
sorted()函数语法格式:sorted(列表,reverse)
- >>> nums = [9,3,5,1,2,18]
- >>> nums
- [9, 3, 5, 1, 2, 18]
- >>> sorted(nums,reverse = False)
- [1, 2, 3, 5, 9, 18]
- >>> sorted(nums,reverse = True)
- [18, 9, 5, 3, 2, 1]
可以看出sorted()函数只生成排序后的列表副本,不改变原列表中元素的顺序。如果想保存排序后的列表,可以定义一个新的列表将其保存。
3.1.1 “+”运算
“+”运算可以将两个列表“加”起来,生成一个新的列表,但是原来的列表并没有发生变化。
- >>> list1 = ['小红','小王','小兰']
- >>> list1
- ['小红', '小王', '小兰']
- >>> list2 = ['张三','李四','王五','小阿丁']
- >>> list2
- ['张三', '李四', '王五', '小阿丁']
- >>> list1 + list2
- ['小红', '小王', '小兰', '张三', '李四', '王五', '小阿丁']
- >>> list1
- ['小红', '小王', '小兰']
- >>> list2
- ['张三', '李四', '王五', '小阿丁']
3.1.2 extend() 方法
extend()方法不同于“+”方法,因为“+”必须通过赋值语句才能将结果写入新的列表中,而extend()方法可以直接将新的列表添加至原列表之后。
语法格式为:列表.extend(新列表)
- >>> list1
- ['小红', '小王', '小兰']
- >>> list2
- ['张三', '李四', '王五', '小阿丁']
- >>> list1.extend(list2)
- >>> list1
- ['小红', '小王', '小兰', '张三', '李四', '王五', '小阿丁']
- >>> list2
- ['张三', '李四', '王五', '小阿丁']
3.1.3 “*”运算
列表的乘法运算是指将列表中的元素重复多遍。
语法格式:列表*n
- >>> list2
- ['张三', '李四', '王五', '小阿丁']
- >>> list2 * 3
- ['张三', '李四', '王五', '小阿丁', '张三', '李四', '王五', '小阿丁', '张三', '李四', '王五', '小阿丁']
3.2.1 copy() 方法
- >>> list2
- ['张三', '李四', '王五', '小阿丁']
- >>> listscopy = list2.copy()
- >>> listscopy
- ['张三', '李四', '王五', '小阿丁']
3.2.2 列表之间的赋值
- >>> list2
- ['张三', '李四', '王五', '小阿丁']
- >>> list1 = list2
- >>> list1
- ['张三', '李四', '王五', '小阿丁']
做到这,似乎这两种方法没有任何区别,都能实现列表的复制,那到底有什么区别呢?继续往下进行删除元素的尝试。
- >>> list1
- ['张三', '李四', '王五', '小阿丁']
- >>> list1copy = list1.copy()
- >>> list1copy
- ['张三', '李四', '王五', '小阿丁']
- >>> del list1copy[0]
- >>> list1copy
- ['李四', '王五', '小阿丁']
- >>> list1
- ['张三', '李四', '王五', '小阿丁']
通过copy()方法得到的新列表在执行删除一个元素的时候,该元素只是从复制的列表中删除,原列表并没有发生任何变化。
- >>> list1
- ['张三', '李四', '王五', '小阿丁']
- >>> list2 = list1
- >>> list2
- ['张三', '李四', '王五', '小阿丁']
- >>> del list2[0]
- >>> list2
- ['李四', '王五', '小阿丁']
- >>> list1
- ['李四', '王五', '小阿丁']
但是使用赋值得到的新列表在执行删除一个元素的时候,该元素不仅在复制列表中被删除,在原列表中也被删除。
这说明,列表的copy()方法会生成一个原列表的备份,并将该备份赋值给新列表,这被称为“深拷贝”。而直接的列表赋值,仅仅是让原列表多了一个新的名字,所谓的“新”列表和原列表共享原来的列表内容,这被称为“浅拷贝”。
3.2.3 列表的切片实现复制
倘若想复制列表的一部分,那就可以使用切片。
- >>> list1
- ['李四', '王五', '小阿丁']
- >>> list3 = list1[1:3]
- >>> list3
- ['王五', '小阿丁']
这也是一种“深拷贝”,读者可以自己上机实验。
语法格式:del 列表名
注意del 也可以通过删除所有元素达到清空列表的作用,原列表仍保存,只不过是一个空列表。
- >>> list2
- ['李四', '王五', '小阿丁']
- >>> del list2[:]
- >>> list2
- []
特别注意:元组的元素是不能修改的,可以将元组理解为“不能修改的列表”。
元组是一种特殊的列表,很多特性和列表相似。
4.1.1 元组与列表之间的转换
tuple()函数用来将列表转换为元组,list()函数用来将元组转换为列表。
- >>> tup1 = ("小阿丁","女",18)
- >>> tup1
- ('小阿丁', '女', 18)
- >>> list1 = list(tup1)
- >>> list1
- ['小阿丁', '女', 18]
- >>> list2 = ['小阿丁','女',20]
- >>> list2
- ['小阿丁', '女', 20]
- >>> tup2 = tuple(list2)
- >>> tup2
- ('小阿丁', '女', 20)
4.1.2 字符串与列表之间的转换
- >>> name = '小阿丁,小红'
- >>> list1 = list(name)
- >>> list1
- ['小', '阿', '丁', ',', '小', '红']
4.1.3 split()方法
split()方法是处理字符串的方法,用来根据指定的分隔符拆分字符串,并生成列表。
语法格式为:字符串.split(分隔符) #分隔符如果缺省的话,默认按照空格拆分字符串
- >>> sentence = 'I want to be split by spcaes.'
- >>> name = '小阿丁,小红'
- >>> sentencelist = sentence.split()
- >>> sentencelist
- ['I', 'want', 'to', 'be', 'split', 'by', 'spcaes.']
- >>> namelist = name.split(',')
- >>> namelist
- ['小阿丁', '小红']
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。