最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的元組(Tuple)操作實(shí)例詳解

 更新時(shí)間:2022年02月24日 10:33:20   作者:孤寒者  
Python?元組和列表很像,也是一個(gè)包含多個(gè)元素的集合,下面這篇文章主要給大家介紹了關(guān)于Python中元組(Tuple)操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

引言

在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)建 && 訪問

(1)元組的創(chuàng)建:

在Python中,創(chuàng)建元組的基本形式是以小括號(hào)“()”將數(shù)據(jù)元素括起來,各個(gè)元素之間用逗號(hào)“,”隔開。

如下:

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)訪問:

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

如下:

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)元組的修改:

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

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

tuple_new = tuple1 + tuple2
print(tuple_new)

(2)元組的刪除:

雖然元組不可變,但是卻可以通過del語句刪除整個(gè)元組。

如下:

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

print(tuple1)		# 正常打印tuple1

del tuple1

print(tuple1)		# 因?yàn)樯厦鎰h除了tuple1,所以再打印會(huì)報(bào)錯(cuò)哦!

3.元組的內(nèi)置方法

元組是不可變,但是我們可以通過使用內(nèi)置方法來操作元組。常用的內(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)

Python允許將一個(gè)包含N個(gè)元素的元組或序列分別為N個(gè)單獨(dú)的變量。這是因?yàn)镻ython語法允許任何序列/可迭代對(duì)象通過簡(jiǎn)單的賦值操作分解為單獨(dú)的變量,唯一的要求是變量的總數(shù)和結(jié)構(gòu)要與序列相吻合。

如下:

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)

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

在Python中,星號(hào)表達(dá)式在迭代一個(gè)變長(zhǎng)的元組序列時(shí)十分有用。如下演示分解一個(gè)待標(biāo)記元組序列的過程。

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)

在Python中迭代處理列表或元組等序列時(shí),有時(shí)需要統(tǒng)計(jì)最后幾項(xiàng)記錄以實(shí)現(xiàn)歷史記錄統(tǒng)計(jì)功能。

使用內(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)

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

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

在上述代碼中,對(duì)一系列文本行實(shí)現(xiàn)了簡(jiǎn)單的文本匹配操作,當(dāng)發(fā)現(xiàn)有合適的匹配時(shí),就輸出當(dāng)前的匹配行以及最后檢查過的N行文本。使用deque(maxlen=N)創(chuàng)建了一個(gè)固定長(zhǎng)度的隊(duì)列。當(dāng)有新記錄加入而使得隊(duì)列變成已滿狀態(tài)時(shí),會(huì)自動(dòng)移除最老的那條記錄。當(dāng)編寫搜索某項(xiàng)記錄的代碼時(shí),通常會(huì)用到含有yield關(guān)鍵字的生成器函數(shù),它能夠?qū)⑻幚硭阉鬟^程的代碼和使用搜索結(jié)果的代碼成功解耦開來。

5.實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

使用內(nèi)置模塊heapq可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的優(yōu)先級(jí)隊(duì)列。

如下——演示了實(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)

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)樵冖賬②中沒有添加所以,所以當(dāng)兩個(gè)元組的優(yōu)先級(jí)相同時(shí)會(huì)出錯(cuò);而在③~④中添加了索引,這樣就不會(huì)出錯(cuò)了!

總結(jié)

到此這篇關(guān)于Python中元組(Tuple)操作的文章就介紹到這了,更多相關(guān)Python 元組(Tuple)操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 的 scapy庫,實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子

    python 的 scapy庫,實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子

    今天小編就為大家分享一篇python 的 scapy庫,實(shí)現(xiàn)網(wǎng)卡收發(fā)包的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python Coroutine池化的實(shí)現(xiàn)詳解

    Python Coroutine池化的實(shí)現(xiàn)詳解

    在當(dāng)今計(jì)算機(jī)科學(xué)和軟件工程的領(lǐng)域中,池化技術(shù)如線程池、連接池和對(duì)象池等已經(jīng)成為優(yōu)化資源利用率和提高軟件性能的重要工具,所以下面我們就來看看Coroutine池化的具體實(shí)現(xiàn)吧
    2024-01-01
  • 使用python繪制愛心效果代碼實(shí)例

    使用python繪制愛心效果代碼實(shí)例

    本文介紹了如何使用Python的Turtle模塊繪制一個(gè)紅色的愛心圖形,示例代碼通過定義draw_love函數(shù),利用Turtle的移動(dòng)和轉(zhuǎn)向功能,實(shí)現(xiàn)了愛心輪廓的繪制,并填充紅色,這種方法適用于簡(jiǎn)單的圖形繪制,并可視化展示結(jié)果,需要的朋友可以參考下
    2024-09-09
  • python實(shí)現(xiàn)碑帖圖片橫向拼接

    python實(shí)現(xiàn)碑帖圖片橫向拼接

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)碑帖圖片橫向拼接,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Python Excel vlookup函數(shù)實(shí)現(xiàn)過程解析

    Python Excel vlookup函數(shù)實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Python Excel vlookup函數(shù)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python文本的藝術(shù)字符串處理技巧掌握

    Python文本的藝術(shù)字符串處理技巧掌握

    這篇文章主要為大家介紹了Python文本的藝術(shù)字符串處理技巧掌握,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • python項(xiàng)目導(dǎo)入open3d后報(bào)錯(cuò)ImportError:DLL load failed:找不到指定的模塊問題

    python項(xiàng)目導(dǎo)入open3d后報(bào)錯(cuò)ImportError:DLL load failed:找不到

    這篇文章主要介紹了python項(xiàng)目導(dǎo)入open3d后報(bào)錯(cuò)ImportError:DLL load failed:找不到指定的模塊問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • python的slice notation的特殊用法詳解

    python的slice notation的特殊用法詳解

    今天小編就為大家分享一篇python的slice notation的特殊用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 如何基于python對(duì)接釘釘并獲取access_token

    如何基于python對(duì)接釘釘并獲取access_token

    這篇文章主要介紹了如何基于python對(duì)接釘釘并獲取access_token,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 如何使用python計(jì)算復(fù)雜三角函數(shù)

    如何使用python計(jì)算復(fù)雜三角函數(shù)

    當(dāng)涉及到計(jì)算復(fù)雜的三角函數(shù)時(shí),Python 提供了強(qiáng)大的數(shù)學(xué)庫和函數(shù)來幫助我們進(jìn)行計(jì)算,在本篇博客中,我將介紹如何使用 Python 來計(jì)算復(fù)雜的三角函數(shù),需要的朋友可以參考下
    2023-08-08

最新評(píng)論

柯坪县| 高平市| 普兰店市| 涡阳县| 林口县| 突泉县| 沽源县| 淮滨县| 遵义市| 高阳县| 温宿县| 普格县| 聊城市| 昔阳县| 吉木乃县| 兰州市| 太康县| 漠河县| 疏附县| 东兰县| 沙洋县| 进贤县| 武宁县| 六枝特区| 台前县| 浮山县| 合肥市| 黄骅市| 惠来县| 澎湖县| 萍乡市| 中江县| 昔阳县| 朝阳县| 玉溪市| 长春市| 齐齐哈尔市| 平遥县| 静安区| 慈溪市| 栖霞市|