1. 列表特性
列表是其他对象的集合,是Python中最灵活的有序集合对象类型。列表主要有以下特点:
1). 任意对象的有序集合,可以通过索引、分片提取
列表也是序列,可以包含其他任何种类的对象:数字、字符串、其他列表等,像字符串一样可以使用索引和分片。
2). 可变长度、异构以及任意嵌套
列表可以实时增加、减少长度;可以包含不同类型的对象(异构);可以创建子列表以及子列表的子列表(嵌套)
3). 列表是可变序列
不同于不可变序列的字符串,列表除了可以使用针对字符串序列的操作,还可以支持索引赋值操作,删除等。
2. 列表的常见操作
2.1 基础操作
- 创建列表
## 创建空列表
l = []
## 创建一个异构列表
>>> l = ['python',123,[1,2,3]]
>>> l
['python', 123, [1, 2, 3]]
## 通过list函数创建列表, list函数里面的对象必须是一个可迭代对象,整数类型不行
>>> l = list('python')
>>> l
['p', 'y', 't', 'h', 'o', 'n']
- 索引和分片 (和字符串相同,可以参见字符串的索引和分片)
l = list('python')
>>> l[0], l[-1], l[2:4], l[:6:2]
('p', 'n', ['t', 'h'], ['p', 't', 'o'])
## 二维列表索引
>>> l = [ [123,456,789], ['abc', 'def', 'ghi'] ]
>>> l[0]
[123,456,789]
>>> l[0][1],l[1][2]
(456, 'ghi')
- 求长度、合并、重复、迭代、判断元素是否在列表
l1 = list('python')
l2 = list('C++')
## 求长度
>>> len(l1)
6
## 合并
>>> l1+l2
['p', 'y', 't', 'h', 'o', 'n', 'C', '+', '+']
## 重复
>>> l2 *3
['C', '+', '+', 'C', '+', '+', 'C', '+', '+']
## 迭代
>>> for x in l1:
... print(x*2)
...
pp
yy
tt
hh
oo
nn
## 判断元素是否在列表
>>> 'o' in l1, 1 in l1
(True, False)
- 增加元素
通过 append(x), extend(iterable), insert(i,x)方法来增加列表元素。append在列表末尾增加一个元素x;extend使用可迭代对象的所有元素来扩展列表;insert在位置 i 处插入元素 x 。
## append
>>> l1 = list('python')
>>> l1.append('is')
>>> l1.append('easy')
>>> l1
['p', 'y', 't', 'h', 'o', 'n', 'is', 'easy']
## extend
>>> s1 = 'c++'
>>> l1.extend(s1)
>>> l1
['p', 'y', 't', 'h', 'o', 'n', 'is', 'easy', 'c', '+', '+']
>>> l2 = [123,456,789]
>>> l1.extend(l2)
>>> l1
['p', 'y', 't', 'h', 'o', 'n', 'is', 'easy', 'c', '+', '+', 123, 456, 789]
## insert
>>> l2.insert(0,000)
>>> l2
[0, 123, 456, 789]
>>> l2.insert(2,'python')
>>> l2
[0, 123, 'python', 456, 789]
- 删除元素
列表通过remove(x), pop( [ i ] ), clear() 删除元素。remove(x)表示删除列表中第一个值为x的元素,如果没有x 这个元素,则抛出VauleError 异常。;pop( [ i ] )删除列表中给定位置 i 的元素并返回它,方括号代表可选,如果不输入 i,默认删除最后一个元素; clear( )删除列表所有元素; del函数加上列表的索引或者分片,可以对这些选中的元素进行删除。
## remove
>>> l1 = ['python', 'is', 'easy']
>>> l1.remove('is')
>>> l1
['python', 'easy']
## pop
>>> l2 = ['abc', 123, 456]
>>> l2.pop(0)
'abc' ##返回了被删除的值
>>> l2
[123, 456]
## clear
>>> l = [123,456,789]
>>> l.clear()
>>> l
[]
## del
>>> l3 = ['python', 'is', 'easy', '.']
>>> del l3[0]
>>> l3
['is', 'easy', '.']
>>> del l3[1:]
>>> l3
['is']
- 计数和返回元素索引值
列表通过 count(x)来统计元素x在列表中出现的次数; 通过index(x)返回元素 x 第一次在列表中出现时的索引值,如果没有这样的元素将会抛出 ValueError 异常。
## count 注意计数的元素必须是完全相同,包含时不满足条件
>>> l = [123, 1234, [123,222,212]]
>>> l.count(123)
1
## index
>>> l = [1, 2, 3, 1, 4, 3, 5, 2]
>>> l.index(3)
2
- 排序
列表通过reverse()来实现反转,或通过sort( key = None, reverse = False)函数自定义排序。默认 key 和 reverse 的时候, 数字、字符串按照ASCII,中文按照unicode从小到大排序; reverse = True 时,每个列表元素将按反向顺序比较进行排序; key 为带有单个参数的函数,用于比较各个元素。
## reverse
>>> l =[1, 3, 2, 5, 3]
>>> l.reverse()
>>> l
[3, 5, 2, 3, 1]
## sort
##### 默认
l.sort()
>>> l
[1, 2, 3, 3, 5]
### key = abs, 按照绝对值大小排序
>>> L1 = [1, 2, -5, -8, 3]
>>> L1.sort(key=abs)
>>> L1
[1, 2, 3, -5, -8]
### key = abs, 按照绝对值大小排序, reverse = True
>>> L2 = [1, 2, -5, -8, 3] ##因为上面对列表L1进行了修改,需要新建一个列表L2
>>> L2.sort(key = abs, reverse = True)
>>> L2
[-8, -5, 3, 2, 1]
## key = len, 按照字符串长度排序
>>> L3 = ['ABC', 'PYTHON', 'C++', 'EASY']
>>> L3.sort(key = len)
>>> L3
['ABC', 'C++', 'EASY', 'PYTHON']
2.2 原处修改的注意
因为列表支持原处修改,Python只处理对象的引用,因此在原处修改后,原来的对象就不存在了,已经改变为新的对象,可能会影响以前对它的引用。
这里在原地修改了a,因此同时修改a,再赋值给b,b不会得到赋值。
>>> a =[123, 456, 789]
>>> b = a.append(111)
>>> b
>>> a
[123, 456, 789, 111]
- 分片赋值实现列表的修改
分片赋值是一次性替换整个选取的片段,被赋值的序列长度不一定要与选取的分片的长度相等。
>>> l = [123, 456, 789, 'abc', 'def', 'ghi']
>>> l[1:4]
[456, 789, 'abc']
>>> l[1:4]= ['aaa']
>>> l
[123, 'aaa', 'def', 'ghi']
本文介绍了Python的列表特性,包括它是可变有序集合,支持任意对象、可变长度和任意嵌套。接着详细讨论了列表的常见操作,如创建、索引、分片、增加、删除元素,以及计数、索引、排序等。特别提醒了原处修改列表可能导致的影响,如分片赋值会改变原列表。
1344

被折叠的 条评论
为什么被折叠?



