数据结构 | 元组
2019-07-16 本文已影响0人
简子逍
基本用法
- 创建元组
tup1 = () # 创建一个空元组
tup2 = (1,) # 当元组内只有一个元素时,需要在元素后面添加逗号
tup3 = (1, 2, 3)
- 修改元组
元组内的元素一旦创立后是不可改变的,但可以对元组进行连接组合。
# 连接元组
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
tup3 = tup1 + tup2
print(tup3) # (12, 34.56, 'abc', 'xyz')
# 删除元组
del tup3
print(tup3) # NameError: name 'tup3' is not defined
元组内置方法
-
len(tuple)
:计算元组元素个数 -
max(tuple)
:返回元组中元素最大值 -
min(tuple)
:返回元组中元素最小值 -
tuple(seq)
:将列表转换为元组
car = ['audi', 'bmw', 'benchi', 'lingzhi']
print(len(car)) # 4
tuple1 = ('5', '4', '8')
print(max(tuple1)) # 8
print(min(tuple1)) # 4
list1 = car
tuple1 = tuple(list1)
print(tuple1) # ('audi', 'bmw', 'benchi', 'lingzhi')
序列分解
Python 允许任何序列(或可迭代对象)通过简单的赋值操作分解为单独的变量,要求是变量的总数和结构要与序列相吻合。
p = (4, 5, 6)
x, y, z = p
print(x) # 4
print(y) # 5
print(z) # 6
x, y = p
print(x, y) # ValueError: too many values to unpack (expected 2)
星号表达式
适用于分解未知或任意长度的可迭代对象。参数使用了*args
,关于其详细用法参见 Python | 动态参数的使用。
records = [
('A', 1, 2),
('B', 'hello'),
('C', 5, 3)
]
def do_A(x, y):
print('A', x, y)
def do_B(s):
print('B', s)
for tag, *args in records:
if tag == 'A':
do_A(*args)
elif tag == 'B':
do_B(*args)
# 输出结果
A 1 2
B hello
line = 'www.computer.com/dsffe-3fdcd.d/we/index.html'
domain, *uri, file = line.split('/')
print(domain) # www.computer.com
print(file) # index.html
优先级队列
使用内置模块heapq
实现一个简单的优先级队列。
import heapq
class PriorityQueue:
def __init__(self):
self._queue = []
self._index = 0
def push(self, item, priority):
heapq.heappush(self._queue, (-priority, self._index, item))
self._index += 1
def pop(self):
return heapq.heappop(self._queue)[-1]
class Item:
def __init__(self, name):
self.name = name
def __repr__(self):
return 'Item({!r})'.format(self.name)
q = PriorityQueue()
q.push(Item('A'), 1)
q.push(Item('B'), 4)
q.push(Item('C'), 5)
q.push(Item('D'), 1)
print(q.pop()) # Item('C')
print(q.pop()) # Item('B')
print(q.pop()) # Item('A')
上述代码中,每次执行pop()
操作时返回的元素具有最高的优先级,拥有相同优先级的两个元素返回的顺序,同插入到队列时的顺序相同。
函数heapq.heappush()
和heapq.heappop()
分别实现了列表_queue
中元素的插入和移除操作,并且保证列表中第一个元素的优先级最低。一般情况下,堆是按从小到大的顺序进行排序的,和优先队列相反。因此在 push()
函数中使用了负的priority
值。_index
的作用是通过维护一个不断递增的索引,将具有相同优先级的元素以加入队列时的顺序排列。