新聞中心
本篇文章給大家?guī)砹岁P(guān)于python的相關(guān)知識(shí),其中主要介紹了關(guān)于元組的相關(guān)問題,包括了元組的創(chuàng)建、訪問、修改、刪除和內(nèi)置方法等,希望對(duì)大家有幫助。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供阿合奇網(wǎng)站建設(shè)、阿合奇做網(wǎng)站、阿合奇網(wǎng)站設(shè)計(jì)、阿合奇網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、阿合奇企業(yè)網(wǎng)站模板建站服務(wù),10年阿合奇做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
推薦學(xué)習(xí):python教程
引言——在Python中,通過數(shù)據(jù)結(jié)構(gòu)來保存項(xiàng)目中重要的數(shù)據(jù)信息。Python語言內(nèi)置了多種數(shù)據(jù)結(jié)構(gòu),例如列表,元組,字典和集合等。本堂課我們來講一講Python中舉足輕重的一大數(shù)據(jù)結(jié)構(gòu)——元組。
在Python中,我們可以將元組看作一種特殊的列表。它與列表唯一的不同在于:元組內(nèi)的數(shù)據(jù)元素不能發(fā)生改變【這個(gè)不變——不但不能改變其中的數(shù)據(jù)項(xiàng),而且也不能添加和刪除數(shù)據(jù)項(xiàng)!】。當(dāng)我們需要?jiǎng)?chuàng)建一組不可改變的數(shù)據(jù)時(shí),通常是將這些數(shù)據(jù)放進(jìn)元組中~
(1)元組的創(chuàng)建:
tuple1 = ('xiaoming', 'xiaohong', 18, 21)
tuple2 = (1, 2, 3, 4, 5)
# 而且——是可以創(chuàng)建空元組哦!
tuple3 = ()
# 小注意——如果你創(chuàng)建的元組只包含一個(gè)元素時(shí),也不要忘記在元素后面加上逗號(hào)。讓其識(shí)別為一個(gè)元組:
tuple4 = (22, )
(2)訪問:
tuple1 = ('xiaoming', 'xiaohong', 18, 21)
tuple2 = (1, 2, 3, 4, 5)
# 顯示元組中索引為1的元素的值
print("tuple1[1]:", tuple1[0])
# 顯示元組中索引從1到3的元素的值
print("tuple2[1:3]:", tuple2[1:3])
2.元組的 修改 && 刪除
(1)元組的修改:
tuple1 = ('xiaoming', 'xiaohong', 18, 21)
tuple2 = (1, 2, 3, 4, 5)
tuple_new = tuple1 + tuple2
print(tuple_new)
(1)元組的刪除:
tuple1 = ('xiaoming', 'xiaohong', 18, 21)
print(tuple1) # 正常打印tuple1
del tuple1
print(tuple1) # 因?yàn)樯厦鎰h除了tuple1,所以再打印會(huì)報(bào)錯(cuò)哦!
3.元組的內(nèi)置方法
- len(tuple):計(jì)算元組元素個(gè)數(shù);
- max(tuple):返回元組中元素的最大值;
- min(tuple):返回元組中元素的最小值;
- tuple(seq):將列表轉(zhuǎn)換為元組。
其實(shí)更多時(shí)候,我們是將元組先轉(zhuǎn)換為列表,操作之后再轉(zhuǎn)換為元組(因?yàn)榱斜砭哂泻芏喾椒▇)。
4.將序列分解為單獨(dú)的變量
(1)
tuple1 = (18, 22) x, y = tuple1 print(x) print(y) tuple2 = ['xiaoming', 33, 19.8, (2012, 1, 11)] name, age, level, date = tuple2 print(name) print(date)
records = [
('AAA', 1, 2),
('BBB', 'hello'),
('CCC', 5, 3)
]
def do_foo(x, y):
print('AAA', x, y)
def do_bar(s):
print('BBB', s)
for tag, *args in records:
if tag == 'AAA':
do_foo(*args)
elif tag == 'BBB':
do_bar(*args)
line = 'guan:ijing234://wef:678d:guan'
uname, *fields, homedir, sh = line.split(':')
print(uname)
print(*fields)
print(homedir)
print(sh)
(2)
使用內(nèi)置的deque實(shí)現(xiàn):
from _collections import deque q = deque(maxlen=3) q.append(1) q.append(2) q.append(3) print(q) q.append(4) print(q)
from _collections import deque
def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)
# Example use on a file
if __name__ == '__main__':
with open('123.txt') as f:
for line, prevlines in search(f, 'python', 5):
for pline in prevlines: # 包含python的行
print(pline) # print (pline, end='')
# 打印最后檢查過的N行文本
print(line) # print (pline, end='')
123.txt:
pythonpythonpythonpythonpythonpythonpython python python
5.實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列
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('AAA'), 1)
q.push(Item('BBB'), 4)
q.push(Item('CCC'), 5)
q.push(Item('DDD'), 1)
print(q.pop())
print(q.pop())
print(q.pop())
在上述代碼中,利用heapq模塊實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的優(yōu)先級(jí)隊(duì)列,第一次執(zhí)行pop()操作時(shí)返回的元素具有最高的優(yōu)先級(jí)。
擁有相同優(yōu)先級(jí)的兩個(gè)元素(foo和grok)返回的順序,同插入到隊(duì)列時(shí)的順序相同。
函數(shù)heapq.heappush()和heapq.heappop()分別實(shí)現(xiàn)了列表_queue中元素的插入和移除操作,并且保證列表中的第一個(gè)元素的優(yōu)先級(jí)最低。
函數(shù)heappop()總是返回“最小”的元素,并且因?yàn)閜ush和pop操作的復(fù)雜度都是O(log2N),其中N代表堆中元素的數(shù)量,因此就算N的值很大,這些操作的效率也非常高。
上述代碼中的隊(duì)列以元組 (-priority, index, item)的形式組成,priority取負(fù)值是為了讓隊(duì)列能夠按元素的優(yōu)先級(jí)從高到底排列。這和正常的堆排列順序相反,一般情況下,堆是按從小到大的順序進(jìn)行排序的。變量index的作用是將具有相同優(yōu)先級(jí)的元素以適當(dāng)?shù)捻樞蚺帕?,通過維護(hù)一個(gè)不斷遞增的索引,元素將以它們加入隊(duì)列時(shí)的順序排列。但是當(dāng)index在對(duì)具有相同優(yōu)先級(jí)的元素間進(jìn)行比較操作,同樣扮演一個(gè)重要的角色。
在Python中,如果以元組(priority, item)的形式存儲(chǔ)元素,只要它們的優(yōu)先級(jí)不同,它們就可以進(jìn)行比較。但是如果兩個(gè)元組的優(yōu)先級(jí)相同,在進(jìn)行比較操作時(shí)會(huì)失敗。這時(shí)可以考慮引入一個(gè)額外的索引值,以(priority, index, item)的方式建立元組,因?yàn)闆]有哪兩個(gè)元組會(huì)有相同的index值,所以這樣就可以完全避免上述問題。一旦比較操作的結(jié)果可以確定,Python就不會(huì)再去比較剩下的元組元素了。
如下——演示了實(shí)現(xiàn)一個(gè)簡(jiǎn)單的優(yōu)先級(jí)隊(duì)列的過程:
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)
# ①
a = Item('AAA')
b = Item('BBB')
#a < b 錯(cuò)誤
a = (1, Item('AAA'))
b = (5, Item('BBB'))
print(a < b)
c = (1, Item('CCC'))
#② a < c 錯(cuò)誤
# ③
a = (1, 0, Item('AAA'))
b = (5, 1, Item('BBB'))
c = (1, 2, Item('CCC'))
print(a < b)
# ④
print(a < c)
在上述代碼中,因?yàn)樵?-2中沒有添加所以,所以當(dāng)兩個(gè)元組的優(yōu)先級(jí)相同時(shí)會(huì)出錯(cuò);而在3-4中添加了索引,這樣就不會(huì)出錯(cuò)了!
當(dāng)前標(biāo)題:實(shí)例詳解Python元組
網(wǎng)站地址:http://www.dlmjj.cn/article/cdoeohh.html


咨詢
建站咨詢
