python 数据结构
2022-04-05 16:45 jym蒟蒻 阅读(59) 评论(0) 编辑 收藏 举报- python 列表、元组、集合、字典、数据结构的循环(整理自python文档)
- 列表-list-用方括号标注,逗号分隔的一组值
- list 的 方法
- 对list添加、插入、删除、查找、排列、翻转
- list.append(x)
- list.extend(iterable)
- list.insert(i, x)
- list.remove(x)
- list.pop([i])
- list.clear()
- list.index(x[, start[, end]])
- list.count(x)
- list.sort(*, key=None, reverse=False)
- list.reverse()
- list.copy()
- list 实现堆栈-append和pop
- list 实现队列
- 创建list
- 列表推导式创建list
- 嵌套的列表推导式
- del语句
- del-从列表中移除元素、移除切片、清空列表
- del-删除变量
- 元组和序列-多个用逗号隔开的值
- 元组的格式-圆括号
- 元组和列表-不可变 与 可变
- 创建元组
- 元组序列解包
- 集合-由不重复元素组成的无序容器。
- 创建集合-用花括号或 `set() ` 函数
- 字典
- 字典的索引(键)-不可变类型
- 字典的键-唯一
- 创建字典
- 字典的主要用途-通过关键字存储、提取值
- 数据结构的循环
- 字典中循环-取出键和值-items()
- 序列中循环-取出位置和值-enumerate()
- 循环多个序列-元素匹配-zip()
- 逆向循环-reversed()
- 指定顺序循环序列-sorted()
- 循环遍历序列中的唯一元素-set()
- 循环中修改列表的内容-创建新列表
列表 ,是用方括号标注,逗号分隔的一组值。可以包含不同类型的元素,也支持索引和切片。
列表数据类型支持很多方法,列表对象的所有方法所示如下:
在列表末尾添加一个元素,相当于 a[len(a):] = [x] 。
用可迭代对象的元素扩展列表。相当于 a[len(a):] = iterable 。
在指定位置插入元素。第一个参数是插入元素的索引,因此,a.insert(0, x) 在列表开头插入元素, a.insert(len(a), x) 等同于 a.append(x) 。
从列表中删除第一个值为 x 的元素。未找到指定元素时,触发 ValueError 异常。
删除列表中指定位置的元素,并返回被删除的元素。未指定位置时,a.pop() 删除并返回列表的最后一个元素。(方法签名中 i 两边的方括号表示该参数是可选的,不是要求输入方括号。这种表示法常见于 Python 参考库)。
删除列表里的所有元素,相当于 del a[:] 。
返回列表中第一个值为 x 的元素的零基索引。未找到指定元素时,触发 ValueError 异常。
可选参数 start 和 end 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 start 参数。
返回列表中元素 x 出现的次数。
就地排序列表中的元素(要了解自定义排序参数,详见 sorted())。
翻转列表中的元素。
返回列表的浅拷贝。相当于 a[:] 。
>>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
>>> fruits.count('apple')
2
>>> fruits.count('tangerine')
0
>>> fruits.index('banana')
3
>>> fruits.index('banana', 4) # Find next banana starting a position 4
6
>>> fruits.reverse()
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']
>>> fruits.append('grape')
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']
>>> fruits.sort()
>>> fruits
['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']
>>> fruits.pop()
'pear'
insert、remove、sort 等方法只修改列表,不输出返回值——返回的默认值为 None 。
不是所有数据都可以排序或比较。例如,[None, ‘hello’, 10] 就不可排序,因为整数不能与字符串对比,而 None 不能与其他类型对比。
使用列表方法实现堆栈,最后插入的最先取出(“后进先出”)。
把元素添加到堆栈的顶端,使用 append()
。
从堆栈顶部取出元素,使用 pop()
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
列表也可以用作队列,最先加入的元素,最先取出(“先进先出”)。
列表作为队列的效率很低。因为,在列表末尾添加和删除元素非常快,但在列表开头插入或移除元素却很慢(因为所有其他元素都必须移动一位)
实现队列最好用 [collections.deque
],可以快速从两端添加或删除元素
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表。
例如,创建平方值的列表:
>>> squares = []
>>> for x in range(10):
... squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
squares = [x**2 for x in range(10)]
列表推导式的方括号内包含以下内容:
一个表达式,后面为一个 for
子句,然后,是零个或多个 for
或 if
子句。
结果是由表达式依据 for
和 if
子句求值计算而得出一个新列表。
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
等价于:
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
其他例子:
>>> vec = [-4, -2, 0, 2, 4]
>>> # create a new list with the values doubled
>>> [x*2 for x in vec]
[-8, -4, 0, 4, 8]
>>> # filter the list to exclude negative numbers
>>> [x for x in vec if x >= 0]
[0, 2, 4]
>>> # apply a function to all the elements
>>> [abs(x) for x in vec]
[4, 2, 0, 2, 4]
>>> # call a method on each element
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> # create a list of 2-tuples like (number, square)
>>> [(x, x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
>>> # the tuple must be parenthesized, otherwise an error is raised
>>> [x, x**2 for x in range(6)]
File "<stdin>", line 1, in <module>
[x, x**2 for x in range(6)]
^
SyntaxError: invalid syntax
>>> # flatten a list using a listcomp with two 'for'
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2