Python List类型
Posted forrest-lin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python List类型相关的知识,希望对你有一定的参考价值。
列表是最常用的Python数据类型
创建一个列表
- 创建一个列表
>>> l = [1, 2, 3, 4, 5 ]
>>> l
[1, 2, 3, 4, 5]
- 创建一个空列表(方法1)
>>> l = []
>>> l
[]
- 创建一个空列表(方法2)
>>> l = list()
>>> l
[]
- 列表不是数组,列表中的数据项不需要具有相同的类型
>>> l = [‘Apple‘, 123, True]
>>> l
[‘Apple‘, 123, True]
- 把range()产生的内容转换成list,range()的范围是从左边的数字到右边的数字,包含左边的数字,不包含右边的数字
>>> l = list(range(12, 19))
>>> l
[12, 13, 14, 15, 16, 17, 18]
访问列表中的值
- 使用下标索引来访问列表中的值
>>> l = [‘physics‘, ‘chemistry‘, 1997, 2000]
>>> l[0]
‘physics‘
- 当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界。
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
- 列表的索引下标是从0开始,表示列表从左向右数第一个数据,即列表第一个数据; 负下标是从-1开始,表示从右向左数,第一个数据,即列表最后一个数据。
>>> l = [1, 2, 3, 4, 5, 6, 7]
>>> l[0]
1
>>> l[-1]
7
更新列表
list是一个可变的有序表,所以,可以往list中追加元素:
- 追加元素至末尾:用append()函数添加:
>>> l = [1,2, 3, 4, 5 ]
>>> l.append(6)
>>> l
[1, 2, 3, 4, 5, 6]
- 把元素插入到指定的位置,比如索引号为1的位置:用insert()函数添加:
>>> l = [1,2, 3, 4, 5 ]
>>> l.insert(1, ‘Jack‘)
>>> l
[1, ‘Jack‘, 2, 3, 4, 5]
删除列表元素
- 可以使用 del 语句来删除列表的元素,del list[i],i为索引位置,如下实例:
>>> l = [‘physics‘, ‘chemistry‘, 1997, 2000]
>>> l
[‘physics‘, ‘chemistry‘, 1997, 2000]
>>> del l[2]
>>> l
[‘physics‘, ‘chemistry‘, 2000]
- 要删除list末尾的元素,用pop()方法,pop()方法返回值为删除的内容:
>>> l = [1, 2, 3, 4, 5 ]
>>> value = l.pop()
>>> l
[1, 2, 3, 4]
>>> value
5
- 要删除指定位置的元素,用pop(i)方法,其中i是索引位置,pop(i)方法返回值为删除的内容:
>>> l = [1, 2, 3, 4, 5]
>>> val = l.pop(2)
>>> l
[1, 2, 4, 5]
>>> val
3
- 还有一个remove() 函数是用于移除列表中某个值的第一个匹配项。
>>> l = [123, ‘xyz‘, ‘zara‘, ‘abc‘, ‘xyz‘]
>>> l.remove(‘xyz‘)
>>> l
[123, ‘zara‘, ‘abc‘, ‘xyz‘]
- 清空列表元素,用clear()方法,清空列表所有的元素,获得一个空列表
>>> l = [1, 2, 3, 4, 5]
>>> l
[1, 2, 3, 4, 5]
>>> l.clear()
>>> l
[]
替换列表元素
- 要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>> classmates = [‘Michael‘, ‘Bob‘, ‘Tracy‘]
>>> classmates[1] = ‘Sarah‘
>>> classmates
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]
双层列表
- list元素也可以是另一个list,比如:
>>> l = [‘python‘, ‘java‘, [‘asp‘, ‘php‘], ‘scheme‘]
>>> len(l)
4
- 要注意s只有4个元素,其中s[2]又是一个list,如果拆开写就更容易理解了:
>>> s = [‘asp‘, ‘php‘]
>>> l = [‘phthon‘, ‘java‘, s, ‘scheme‘]
>>> l
[‘phthon‘, ‘java‘, [‘asp‘, ‘php‘], ‘scheme‘]
- 要拿到‘php‘可以写p[1]或者s[2][1],因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。
- 列表的拷贝:
- 浅拷贝:只拷贝父对象,不会拷贝对象的内部的子对象
- 方法一:
>>> a = [1,2,3, [10, 20, 30]] >>> b = a.copy() >>> a[2] = 77 >>> a[3][2] = 666 >>> a [1, 2, 77, [10, 20, 666]] >>> b [1, 2, 3, [10, 20, 666]]
- 方法二
>>> import copy >>> a = [1,2,3, [10, 20, 30]] >>> b = copy.copy(a) >>> a[2] = 77 >>> a[3][2] = 666 >>> a [1, 2, 77, [10, 20, 666]] >>> b [1, 2, 3, [10, 20, 666]]
- 深拷贝:拷贝对象及其子对象
>>> import copy >>> a = [1,2,3, [10, 20, 30]] >>> b = copy.deepcopy(a) >>> a[2] = 77 >>> a[3][2] = 666 >>> a [1, 2, 77, [10, 20, 666]] >>> b [1, 2, 3, [10, 20, 30]]
列表截取(分片操作)
- 浅拷贝:只拷贝父对象,不会拷贝对象的内部的子对象
- 截取的范围,包含左边的下标值,不包含右边的下标值
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[1:4]
[2, 3, 4]
- 下标值可以不写,如果不写,左边下标值默认为0,右边下标值为最大加一,即表示截取到最后一个数据
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[:]
[1, 2, 3, 4, 5, 6, 7]
>>> l[:4]
[1, 2, 3, 4]
>>> l[2:]
[3, 4, 5, 6, 7]
- 分片可以控制增长幅度,默认增长幅度为1
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[1:6:1]
[2, 3, 4, 5, 6]
>>> l[1:6:2]
[2, 4, 6]
- 分片可以为负下标,涨幅也可以为负数
>>> l = [1, 2, 3, 4, 5, 6, 7 ]
>>> l[-2:-4]
[]
>>> l[-4:-2]
[4, 5]
>>> l[-1:-5:-1]
[7, 6, 5, 4]
>>> l[-1:-5:-2]
[7, 5]
>>> l[::-1]
[7, 6, 5, 4, 3, 2, 1]
列表的遍历
- for循环遍历列表
>>> l = [1,2,3,4,5]
>>> for i in l:
... print(i)
...
1
2
3
4
5
- while循环遍历列表
>>> a = [1,2,3,4,5,6]
>>> length = len(a)
>>> indx = 0
>>> while indx < length:
... print(a[indx])
... indx += 1
...
1
2
3
4
5
6
- 双层列表循环
>>> l = [["one", 1, "eins"], ["two", 2,"zwei"], ["three", 3,"drei"] ]
>>> for k,v,w in l:
... print(k, "--", v, "--",w)
...
one -- 1 -- eins
two -- 2 -- zwei
three -- 3 -- drei
列表内涵
- 通过简单方法创作列表
>>> a = [‘a‘, ‘b‘, ‘c‘]
>>> b = [i for i in a]
>>> b
[‘a‘, ‘b‘, ‘c‘]
- 对列表a中所有元素乘以10, 并生成新的列表
>>> a = [1, 2, 3, 4, 5]
>>> b = [i*10 for i in a]
>>> b
[10, 20, 30, 40, 50]
- 获取50以内所有的偶数,并生成新的列表
>>> a = range(1, 51)
>>> b = [i for i in a if i % 2 == 0]
>>> b
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
- 两个列表中所有的元素相加,并输出小于250的数值
>>> a = [i for i in range(1,4)]
>>> a
[1, 2, 3]
>>> b = [i for i in range(100,400) if i % 100 == 0]
>>> b
[100, 200, 300]
>>> c = [ m+n for m in a for n in b]
>>> c
[101, 201, 301, 102, 202, 302, 103, 203, 303]
>>> c = [ m+n for m in a for n in b if m+n < 250]
>>> c
[101, 201, 102, 202, 103, 203]
列表脚本操作符
- 列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
- 使用 + 链接两个列表
>>> a = [1,2,3,4,5] >>> b = [5,6,7,8,9] >>> d = [‘a‘, ‘b‘, ‘c‘] >>> c = a + b + d >>> c [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, ‘a‘, ‘b‘, ‘c‘]
- 使用 * 操作列表,相当于把n个列表拼接在一起
>>> a = [1,2,3,4,5] >>> b = a *3 >>> b [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
- 使用 in, 相当于判断元素是否包含在列表中
>>> a = [1,2,3,4,5] >>> 3 in a True >>> 7 in a False
列表函数
- cmp(list1, list2) : 比较两个列表的元素
- len(list) : 返回列表元素的个数
- max(list) : 返回列表元素的最大值
- min(list) : 返回列表元素的最小值
list(seq) : 将可hash的数据转化为列表
列表方法:
- list.append(obj) : 在列表末尾添加新的对象
- list.count(obj) : 统计某个元素在列表中出现的次数
- list.extend(seq) :在列表末尾一次性追加另一个序列中的多个值
- list.index(obj) : 从列表中找到某个值第一个匹配值的索引位置
- list.insert(index, obj) : 将对象插入列表
- list.pop(index = -1) : 移除列表中的一个元素(默认是最后一个元素),并且返回改元素的值
- list.remove(obj) : 移除列表中某个值的第一个匹配项
- list.reverse() : 反向类表中元素
list.sort(cmp = None, key = None, reverse = False) : 对原列表进行排序
字符串与列表的相互转换
- 字符串转列表(split()函数)
- 方法一:
>>> str1 = "hi hello world" >>> str1.split(" ") [‘hi‘, ‘hello‘, ‘world‘]
- 方法二
>>> str1 = "hi hello world" >>> list(str1) [‘h‘, ‘i‘, ‘ ‘, ‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘ ‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘]
- 列表转字符串(join()函数)
>>> l = ["hi","hello","world"]
>>> " ".join(l)
‘hi hello world‘
以上是关于Python List类型的主要内容,如果未能解决你的问题,请参考以下文章