Python数据类型-4 列表,,列表列表是Pytho


列表

列表是Python中最基本也是最常用的数据结构之一。列表中的每个元素都被分配一个数字作为索引,用来表示该元素在列表内所排在的位置。第一个元素的索引是0,第二个索引是1,依此类推。

Python的列表是一个有序可重复的元素集合,可嵌套、迭代、修改、分片、追加、删除,成员判断。

从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针。

对于这个列表 alist = [1, “a”, [11,22], {“k1”:”v1”}],其在内存内的存储方式是这样的:
技术图片

创建方式
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可

['1',2,'hello']  # 列表('1',2,'hello')  # 元组{'1',2,'hello'}  # 集合{'name':'juran','age':18}for i in ['1',2,'hello']:    print(i)# 通过查看源码来看创建的方法l = list(['1',2,'hello'])print(l)l = [1, 2, 3]l1 = [1, 'hello', 1.2]print(l1)-------------------------------------------------list = []       # 定义空列表list1 = ['physics', 1997, 2000]list2 = [1, 2, 3]list3 = ["a", "b", "c"]

访问列表内的元素
列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一 。要访问它的某个元素,以方括号加下标值的方式即可。注意要确保索引不越界,一旦访问的 索引超过范围,会抛出异常。所以,一定要记得最后一个元素的索引是len(list)-1。

>>> lis = ["a", "b", "c"]>>> lis[0]'a'>>> lis[1]'b'>>> lis[2]'c'>>> lis[3]Traceback (most recent call last):  File "<pyshell#7>", line 1, in <module>    lis[3]IndexError: list index out of range

修改元素的值
直接对元素进行重新赋值。

>>> lis[0]'a'>>> lis[0] = "d">>> lis[0]'d'

删除元素
使用del语句或者remove(),pop()方法删除指定的元素。

>>> lis = ["a", "b", "c"]>>> del lis[0]      # 根据索引删除>>> lis['b', 'c']>>> lis.remove("b") # 直接根据值进行删除>>> lis['c']>>> lis.pop()       # 弹出最后一个'c'>>> lis[]l1 = [1, 'hello', 1]l2 = l1.pop(1)  # 根据索引来弹出 1为索引print(l2)

列表的特殊操作

语句                          结果                              描述[1, 2, 3] + [4, 5, 6]          [1, 2, 3, 4, 5, 6]               组合两个列表l1 = [1, 2, 3]l2 = [4, 5, 6]print(l1.__add__(l2))  # 底层调用了__add__方法['Hi!'] * 4                   ['Hi!', 'Hi!', 'Hi!', 'Hi!']       列表的乘法l1 = [1, 2, 3]print(l1.__mul__(3))3 in [1, 2, 3]                 True                            判断元素是否存在于列表中l1 = [1, 2, 3]print(l1.__contains__(1))for x in [1, 2, 3]: print x,    1 2 3                           迭代列表中的每个元素

列表的常用函数

l1 = [1, 2, 3]函数        作用len(list)   返回列表元素个数,也就是获取列表长度 l1.__len__()max(list)   返回列表元素最大值  max(l1)  max(1,2,3,4)min(list)   返回列表元素最小值list(seq)   将序列转换为列表>>> s = list((1, "a", "b", 2))>>> s[1, 'a', 'b', 2]>>> max(s)          # 不能混合不同类型进行最大最小求值Traceback (most recent call last):  File "<pyshell#20>", line 1, in <module>    max(s)TypeError: '>' not supported between instances of 'str' and 'int'

排序和反转

list.reverse()  将列表反转 修改本身 *IN PLACE*list.sort()     排序,默认升序 如果列表内的元素全为数字,或者字母排序没有问题。如果字母和数字都有的情况下,排序会报错list.sort(reverse=True)     降序排列

切片--也叫截取
切片指的是对序列进行截取,选取序列中的某一段。

切片的语法是: list[start:end]

以冒号分割索引,start代表起点索引,end代表结束点索引。省略start表示以0开始,省略end表示到列表的结尾。注意,区间是左闭右开的!

如果提供的是负整数下标,则从列表的最后开始往头部查找。例如-1表示最后一个元素,-3表示倒数第三个元素。

切片过程中还可以设置步长,以第二个冒号分割,例如list[3:9:2],表示每隔多少距离取一个元素。

l3 = ['a','b','c','d','e','f']print(l3[1])print(l3[2])print(l3[1:3])print(l3[:3])print(l3[2:])print(l3[:])        # 复制列表print(l3[::2])      # 隔一个一取a[-1]       8a[-5:]      [4,5,6,7,8]a[::-1]     想当于逆序输出 [8, 7, 6, 5, 4, 3, 2, 1]a[1:5:2]    [2,4]

多维列表(嵌套列表)

a = [[1,2,3],[4,5,6],[7,8,9]]a[0][1]2a = [[1,2,3],[4,5,6],{"k1":"v1"}]a[2]["k1"]v1

列表的遍历
列表有好几种遍历方式:

a = [1,2,3,4,5,6]for i in a:             # 遍历每一个元素本身    print(i)for i in range(len(a)):     # 遍历列表的下标,通过下标取值    print(i, a[i])x = 9if x in a:      # 进行是否属于列表成员的判断。该运算速度非常快。    print("True")else:    print("False")

列表的内置方法

方法              作用append(obj)     在列表末尾添加新的对象count(obj)      统计某个元素在列表中出现的次数extend(seq)     在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)index(obj)      从列表中找出某个值第一个匹配项的索引位置insert(index, obj)  将对象插入列表pop(obj=list[-1])   移除列表中的一个元素(默认最后一个元素),并且返回该元素的值remove(obj)      移除列表中某个值的第一个匹配项reverse()       反向列表中元素sort([func])     对原列表进行排序copy()          复制列表clear()         清空列表,等于del lis[:]

注意:其中的类似 append,insert, remove 等方法会修改列表本身,并且没有返回值(严格的说是返回None)。

Python数据类型-4 列表

评论关闭