列表(list)

4.4 列表(list)

列表是Python中使用最频繁也是最重要最灵活的一种数据结构。Python列表中的元素类型可以不同,可以存放各种各样的数据,比如:数字、字符串、函数、类、字典等,甚至还可以嵌套存放列表。
列表也是一种序列,可以通过索引获取列表中的元素。支持序列的各种操作。

4.4.1 列表的创建

4.4.1.1 通过列表标识符号创建

列表在创建的时候用[]做标识。内部的元素用逗号进行分隔。
>>> lst1 = [] # 空列表
>>> lst2 = [1, 1, 2, 3, 5] # 列表中存放的全是数字
>>> lst3 = ['a', 'b', 'c'] # 列表中存放的全是字符
>>> lst4 = [1, 'a', '中'] # 列表中存放混合数据
>>> lst5 = ['red', 'green', 'blue'] # 列表中存放的全是字符串

4.4.1.2 通过列表推导创建

>>> [x for x in range(5)]

[0, 1, 2, 3, 4]

>>> [x * x for x in range(10)]

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> [x*x for x in range(10) if x%3 == 0]

[0, 9, 36, 81]

>>> [[x, y] for x in range(3) for y in range(3)]

[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]

>>> [[x, y] for x in range(5) for y in range(5) if y >= x]

[[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [2, 3], [2, 4], [3, 3], [3, 4], [4, 4]]

4.4.1.3 通过list函数创建

list函数可以将一个可迭代对象转换成列表。
>>> print(list('Python'))

['P', 'y', 't', 'h', 'o', 'n']

4.4.1.4 列表的拼接和重复

参见可迭代对象章节中的序列的拼接和重复

4.4.2 列表的访问

4.4.2.1 列表索引

参见可迭代对象章节中的序列的索引

4.4.2.2 列表切片

参见可迭代对象章节中的序列的切片

4.4.2.3 遍历列表

参见可迭代对象章节中的可迭代对象的遍历

4.4.2.4 成员资格检查

参见可迭代对象章节中的成员资格检查

4.4.3 列表的修改

列表不同于字符串,是可以原地修改的。

4.4.3.1 单个元素的修改

可以通过索引的方式修改单个元素:
>>> lst = ['P', 'y', 't', 'h', 'o', 'n']
>>> lst[0] = 'J'
>>> lst

['J', 'y', 't', 'h', 'o', 'n']

4.4.3.2 多个元素的修改

可以通过切片的方式修改多个元素:
>>> lst = ['P', 'y', 't', 'h', 'o', 'n']
>>> lst[0:4] = 'Java'
>>> lst

['J', 'a', 'v', 'a', 'o', 'n']

>>> lst = ['P', 'y', 't', 'h', 'o', 'n']
>>> lst[0:4] = ['Java']
>>> lst

['Java', 'o', 'n']

4.4.4 列表的删除

4.4.4.1 删除列表元素

通过索引删除单个元素
>>> lst = ['P', 'y', 't', 'h', 'o', 'n']
>>> del lst[0]
>>> print(lst)

['y', 't', 'h', 'o', 'n']

通过切片删除多个元素
>>> lst = ['P', 'y', 't', 'h', 'o', 'n']
>>> del lst[0:2]
>>> lst

['t', 'h', 'o', 'n']

4.4.4.2 删除整个列表

>>> lst = ['P', 'y', 't', 'h', 'o', 'n']
>>> del lst
>>> lst

Traceback (most recent call last):
File "E:\studypy\tmp.py", line 3, in
print(lst)
NameError: name 'lst' is not defined. Did you mean: 'list'?

4.4.5 列表的方法

4.4.5.1 增加元素

4.4.5.1.1 append(x)

描述
在列表末尾添加一个元素,相当于a[len(a):] = [x]。
示例

lst = list('Python')
lst.append('1')
print(lst)

['P', 'y', 't', 'h', 'o', 'n', '1']

4.4.5.1.2 extend(iterable)

描述
用可迭代对象的元素扩展列表。相当于 a[len(a):] = iterable。
示例

lst = list('Python')
lst.extend('Java')
print(lst)

['P', 'y', 't', 'h', 'o', 'n', 'J', 'a', 'v', 'a']

lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
lst1.extend(lst2)
print(lst1)

[1, 2, 3, 4, 5, 6]

4.4.5.1.3 insert(i, x)

描述
在指定位置插入1个元素。第一个参数是插入元素的索引,因此,a.insert(0, x) 在列表开头插入元素,a.insert(len(a), x) 等同于 a.append(x)。
示例

lst = list('Python')
lst.insert(0, 'Java')
print(lst)

['Java', 'P', 'y', 't', 'h', 'o', 'n']

4.4.5.2 删除元素

4.4.5.2.1 remove(x)

描述
从列表中删除第一个值为 x 的元素。未找到指定元素时,触发 ValueError 异常。
示例

lst = list('Python')
lst.remove('o')
print(lst)
lst.remove('o')
print(lst)

['P', 'y', 't', 'h', 'n']
Traceback (most recent call last):
File "E:\studypy\tmp.py", line 4, in
lst.remove('o')
ValueError: list.remove(x): x not in list

4.4.5.2.2 pop([i])

描述
删除列表中指定位置的元素(第i个元素,如果索引越界了则会报错:IndexError),并返回被删除的元素。
未指定位置时,a.pop() 删除并返回列表的最后一个元素。
示例

lst = list('Python')
lst.pop()
print(lst)
lst.pop(0)
print(lst)
lst.pop(10)
print(lst)

['P', 'y', 't', 'h', 'o']
['y', 't', 'h', 'o']
Traceback (most recent call last):
File "E:\studypy\tmp.py", line 6, in
lst.pop(10)
IndexError: pop index out of range

4.4.5.2.3 clear()

描述
删除列表里的所有元素,相当于 del lst[:]。
注意:del lst[:] 是情况整个列表,使得列表为空。列表还存在,只不过是个空的列表(里面没有元素了)。而 del lst是删除这个列表。列表不存在了,再次引用该列表则会报错。
示例

lst = list('Python')
lst.clear()
print(lst)

[]

4.4.5.3 查询统计类

4.4.5.3.1 count(x)

参见可迭代对象章节中序列小节中的序列count方法

4.4.5.3.2 index(x[, start[, end]])

参见可迭代对象章节中序列小节中的序列index方法

4.4.5.3.3 sort(*, key=None, reverse=False)

描述
就地排序列表中的元素,要了解自定义排序参数,详见后面的sorted函数。
示例

lst = list('Python132')
lst.sort(reverse=True)   # 倒序
print(lst)
lst = list('Python132')
lst.sort(reverse=False)  # 顺序
print(lst)

['y', 't', 'o', 'n', 'h', 'P', '3', '2', '1']
['1', '2', '3', 'P', 'h', 'n', 'o', 't', 'y']

4.4.5.3.4 reverse()

描述
就地翻转列表中的元素。
示例

lst = list('Python132')
lst.reverse()
print(lst)

['2', '3', '1', 'n', 'o', 'h', 't', 'y', 'P']

4.4.5.4 其它

4.4.5.4.1 copy()

描述
返回列表的拷贝。相当于 lst[:] 。
示例

lst = list('Python')
lst2 = lst.copy()
print(lst2)

['P', 'y', 't', 'h', 'o', 'n']

4.4.6 用列表实现堆栈和队列

4.4.6.1 实现堆栈

使用列表方法实现堆栈非常容易,最后插入的最先取出(“后进先出”)。把元素添加到堆栈的顶端,使用 append() 。从堆栈顶部取出元素,使用 pop() ,不用指定索引。例如:

stack = [3, 4, 5]
stack.append(6)
stack.append(7)
print(stack)
stack.pop()
print(stack)
stack.pop()
stack.pop()
print(stack)

[3, 4, 5, 6, 7]
[3, 4, 5, 6]
[3, 4]

4.4.6.2 实现队列

列表也可以用作队列,最先加入的元素,最先取出(“先进先出”);然而,列表作为队列的效率很低。因为,在列表末尾添加和删除元素非常快,但在列表开头插入或移除元素却很慢(因为所有其他元素都必须移动一位)。
实现队列最好用 collections.deque,可以快速从两端添加或删除元素。例如:

from collections import deque
queue = deque(["red", "green", "blue"])
queue.append("black")
queue.append("white")
print(queue)
queue.popleft()
print(queue)
queue.pop()
print(queue)
print(list(queue))

deque(['red', 'green', 'blue', 'black', 'white'])
deque(['green', 'blue', 'black', 'white'])
deque(['green', 'blue', 'black'])
['green', 'blue', 'black']

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:列表(list) - Python技术站

(0)
上一篇 2023年4月2日 下午5:17
下一篇 2023年4月2日 下午5:17

相关文章

  • 字符串(str、bytes)

    4.3 字符串(str、bytes) 4.3.1 字符串前置知识 4.3.1.1 字符串的概念 字符串由一系列字符组成,字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符串是编程语言中表示文本的数据类型。字符串就是由一个个元素(字符)组成的。像这种由一个个元素按照顺序组成的数据,在Python语言里面,把这种特…

    Python开发 2023年4月2日
    00
  • 集合(set)

    4.6 集合(set) 集合是由不重复元素组成的无序容器。集合中的元素不能重复,即使向集合中再添加同样的元素,也只会保留一个。由于集合的这种特性,所以一般可以用集合进行去重。集合中不能添加可变对象(不可哈希),因为无法判断两个可变对象是否相同,也就无法保证集合的内部不会有重复元素。集合中的元素是无序的,我们通过print可以显示集合内的元素,但是显示的结果并…

    Python开发 2023年4月2日
    00
  • Python代码块及输入输出

    3.7 Python代码块及输入输出 3.7.1 Python代码块 前面分别介绍了关键字、运算符,由运算符和操作数组成了表达式。而语句由关键字、标识符、表达式组成。而代码块由若干条语句组成。通常Python中的代码块是通过缩进来创建的。在很多语言中,都使用一个特殊的单词或字符,比如begin或{来标识代码块的起始位置,并使用另一个特殊的单词或字符,如end…

    Python开发 2023年4月2日
    00
  • 类属性和对象属性

    6.3 类属性和对象属性 在类定义中,属性按照归属分为对象属性、类属性。按照调用的私密性分为一般属性和私有属性。 6.3.1 类属性和对象属性 对象属性是最常用到的一种属性。即使我们对上面的类:MyClass1实例化了一个mc的对象,mc对象也不能进行有实质的操作。因为mc对象的类:MyClass1中既没有定义属性也没有定义方法。在定义类时还能定义类属性。接…

    Python开发 2023年3月31日
    00
  • 文档字符串

    5.5 文档字符串 开发者在编写函数或模块时不光要自己能看懂,在和他人合作共同开发或者被他人调用时也需要他人也能看懂。这个时候就可以为自己编写的函数、模块或者类添加相应的文档字符串(docstring)进行说明了。一般的,如果想要在模块中添加模块文档字符串,则需要在模块的最上方用3个双引号引住内容,这部分内容则自动会被识别为模块的文档字符串。注意:模块文档字…

    Python开发 2023年3月31日
    00
  • Python变量

    4.10 Python变量 4.10.1 变量介绍 变量,顾名思义,就是可以变化的量。变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python中,变量就是变量,它没有类型,我们所说的类型是变量所指的内存…

    Python开发 2023年4月2日
    00
  • 常用库

    2.4 常用库 2.4.1 time 时间的访问和转换 该模块提供了各种与时间相关的函数。相关功能还可以参阅 datetime 和 calendar 模块。 2.4.2 datetime 基本日期和时间类型 datetime 模块提供用于处理日期和时间的类。 2.4.3 calendar 日历相关函数 这个模块让你可以输出像 Unix cal 那样的日历,它…

    Python开发 2023年4月2日
    00
  • 包和库

    2.3 包和库 2.3.1 包的概念 包是在模块之上的概念,为了方便管理而将多个脚本文件(模块文件)进行打包。包是一种用点式模块名构造 Python 模块命名空间的方法。例如,模块名 A.B 表示包 A 中名为 B 的子模块。正如模块可以区分不同模块之间的全局变量名称一样,点式模块名可以区分 NumPy 或 Pillow 等不同多模块包之间的模块名称。包其实…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部