中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python元組實例分析

發布時間:2022-03-15 09:32:32 來源:億速云 閱讀:180 作者:iii 欄目:編程語言

本篇內容主要講解“Python元組實例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python元組實例分析”吧!

Python元組實例分析

引言——在Python中,通過數據結構來保存項目中重要的數據信息。Python語言內置了多種數據結構,例如列表,元組,字典和集合等。本堂課我們來講一講Python中舉足輕重的一大數據結構——元組。

在Python中,我們可以將元組看作一種特殊的列表。它與列表唯一的不同在于:元組內的數據元素不能發生改變【這個不變——不但不能改變其中的數據項,而且也不能添加和刪除數據項!】。當我們需要創建一組不可改變的數據時,通常是將這些數據放進元組中~

1.元組的 創建 && 訪問

(1)元組的創建:

在Python中,創建元組的基本形式是以小括號“()”將數據元素括起來,各個元素之間用逗號“,”隔開。
如下:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)
tuple2 = (1, 2, 3, 4, 5)

# 而且——是可以創建空元組哦!
tuple3 = ()

# 小注意——如果你創建的元組只包含一個元素時,也不要忘記在元素后面加上逗號。讓其識別為一個元組:
tuple4 = (22, )

(2)訪問:

元組和字符串以及列表類似,索引都是從0開始,并且可以進行截取和組合等操作。
如下:

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])

Python元組實例分析

2.元組的 修改 && 刪除

(1)元組的修改:

雖然在開頭就說元組不可變,但是它還是有個被支持的騷操作——元組之間進行連接組合:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)
tuple2 = (1, 2, 3, 4, 5)

tuple_new = tuple1 + tuple2
print(tuple_new)

Python元組實例分析

(1)元組的刪除:

雖然元組不可變,但是卻可以通過del語句刪除整個元組。
如下:

tuple1 = ('xiaoming', 'xiaohong', 18, 21)

print(tuple1)		# 正常打印tuple1

del tuple1

print(tuple1)		# 因為上面刪除了tuple1,所以再打印會報錯哦!

Python元組實例分析

3.元組的內置方法

元組是不可變,但是我們可以通過使用內置方法來操作元組。常用的內置方法如下:

  1. len(tuple):計算元組元素個數;

  2. max(tuple):返回元組中元素的最大值;

  3. min(tuple):返回元組中元素的最小值;

  4. tuple(seq):將列表轉換為元組。

其實更多時候,我們是將元組先轉換為列表,操作之后再轉換為元組(因為列表具有很多方法~)。

4.將序列分解為單獨的變量

(1)

Python允許將一個包含N個元素的元組或序列分別為N個單獨的變量。這是因為Python語法允許任何序列/可迭代對象通過簡單的賦值操作分解為單獨的變量,唯一的要求是變量的總數和結構要與序列相吻合。
如下:

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)

Python元組實例分析

如果要分解未知或任意長度的可迭代對象,上述分解操作豈不直接很nice!通常在這類可迭代對象中會有一些已知的組件或模式(例如:元素1之后的所有內容都是電話號碼),利用“*”星號表達式分解可迭代對象后,使得開發者能輕松利用這些模式,而無須在可迭代對象中做復雜操作就能得到相關的元素。

在Python中,星號表達式在迭代一個變長的元組序列時十分有用。如下演示分解一個待標記元組序列的過程。

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)

Python元組實例分析

(2)

在Python中迭代處理列表或元組等序列時,有時需要統計最后幾項記錄以實現歷史記錄統計功能。

使用內置的deque實現:

from _collections import deque

q = deque(maxlen=3)
q.append(1)
q.append(2)
q.append(3)
print(q)
q.append(4)
print(q)

Python元組實例分析

如下——演示了將序列中的最后幾項作為歷史記錄的過程。

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

Python元組實例分析

在上述代碼中,對一系列文本行實現了簡單的文本匹配操作,當發現有合適的匹配時,就輸出當前的匹配行以及最后檢查過的N行文本。使用deque(maxlen=N)創建了一個固定長度的隊列。當有新記錄加入而使得隊列變成已滿狀態時,會自動移除最老的那條記錄。當編寫搜索某項記錄的代碼時,通常會用到含有yield關鍵字的生成器函數,它能夠將處理搜索過程的代碼和使用搜索結果的代碼成功解耦開來。

5.實現優先級隊列

使用內置模塊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('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模塊實現了一個簡單的優先級隊列,第一次執行pop()操作時返回的元素具有最高的優先級。
擁有相同優先級的兩個元素(foo和grok)返回的順序,同插入到隊列時的順序相同。

函數heapq.heappush()和heapq.heappop()分別實現了列表_queue中元素的插入和移除操作,并且保證列表中的第一個元素的優先級最低。

函數heappop()總是返回“最小”的元素,并且因為push和pop操作的復雜度都是O(log2N),其中N代表堆中元素的數量,因此就算N的值很大,這些操作的效率也非常高。

上述代碼中的隊列以元組 (-priority, index, item)的形式組成,priority取負值是為了讓隊列能夠按元素的優先級從高到底排列。這和正常的堆排列順序相反,一般情況下,堆是按從小到大的順序進行排序的。變量index的作用是將具有相同優先級的元素以適當的順序排列,通過維護一個不斷遞增的索引,元素將以它們加入隊列時的順序排列。但是當index在對具有相同優先級的元素間進行比較操作,同樣扮演一個重要的角色。

在Python中,如果以元組(priority, item)的形式存儲元素,只要它們的優先級不同,它們就可以進行比較。但是如果兩個元組的優先級相同,在進行比較操作時會失敗。這時可以考慮引入一個額外的索引值,以(priority, index, item)的方式建立元組,因為沒有哪兩個元組會有相同的index值,所以這樣就可以完全避免上述問題。一旦比較操作的結果可以確定,Python就不會再去比較剩下的元組元素了。

如下——演示了實現一個簡單的優先級隊列的過程:

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  錯誤
a = (1, Item('AAA'))
b = (5, Item('BBB'))
print(a < b)
c = (1, Item('CCC'))
#② a < c 錯誤
# ③
a = (1, 0, Item('AAA'))
b = (5, 1, Item('BBB'))
c = (1, 2, Item('CCC'))
print(a < b)
# ④
print(a < c)

Python元組實例分析

在上述代碼中,因為在1-2中沒有添加所以,所以當兩個元組的優先級相同時會出錯;而在3-4中添加了索引,這樣就不會出錯了!

到此,相信大家對“Python元組實例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節
推薦閱讀:
  1. Python之元組
  2. Python元組

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东台市| 平邑县| 铜陵市| 游戏| 嘉禾县| 黄山市| 长宁县| 丹凤县| 千阳县| 淮南市| 防城港市| 西安市| 郁南县| 宁蒗| 彭山县| 澳门| 武汉市| 新沂市| 怀柔区| 开江县| 铜川市| 且末县| 虹口区| 迭部县| 五大连池市| 武夷山市| 溧阳市| 锦州市| 修文县| 红河县| 河南省| 泗洪县| 宣化县| 收藏| 安化县| 桐城市| 同德县| 沙洋县| 论坛| 六安市| 吴旗县|