数据结构

Python 数据结构

Python有4个内建数据结构:List,Tuple,Dictionary,Set。它们可以统称为容器。

列表当做堆栈

>>> stack = [1, 2, 3]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[1, 2, 3, 6, 7]
>>> stack.pop()
7
>>> stack
[1, 2, 3, 6]

列表当作队列使用

也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。

Python双端队列deque实现队列:

>>> from collections import deque
>>> queue = deque(['A', 'B', 'C'])
>>> queue.append('D')
>>> queue.append('E')
>>> queue.popleft()
'A'
>>> queue.popleft()
'B'
>>> queue
deque(['C', 'D', 'E'])

列表推导式

  • 列表推导式提供了从序列创建列表的简单途径

  • 通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

  • 每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

# 这里我们将列表中每个数值乘三,获得一个新的列表:
>>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]

# 现在我们玩一点小花样:
>>> [[x, x**2] for x in vec]
[[2, 4], [4, 16], [6, 36]]

# 这里我们对序列里每一个元素逐个调用某方法:
>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']

# 可以用 if 子句作为过滤器:
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]

# 一些关于循环和其它技巧的演示
>>> vec1 = [2, 4, 6]
>>> vec2 = [4, 3, -9]
>>> [x*y for x in vec1 for y in vec2]
[8, 6, -18, 16, 12, -36, 24, 18, -54]
>>> [x+y for x in vec1 for y in vec2]
[6, 5, -7, 8, 7, -5, 10, 9, -3]
>>> [vec1[i]*vec2[i] for i in range(len(vec1))]
[8, 12, -54]

# 列表推导式可以使用复杂表达式或嵌套函数
>>> [str(round(355/113, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

del 语句

  • 使用 del 语句可以从一个列表中依索引而不是值来删除一个元素

  • 可以用 del 语句从列表中删除一个切割,或清空整个列表(我们以前介绍的方法是给该切割赋一个空列表)

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

# 也可以用 del 删除实体变量:
>>> del a

最后更新于

这有帮助吗?