国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Python中級篇—高級數據類型(集合和命名元組迭代器和生成器)

開發 前端
本篇主要是迭代器和生成器的基本介紹,它們是 Python 中非常重要的概念,可以幫助我們高效地處理大量數據。

集合 (Set)

集合是一種無序、可變、且元素唯一的數據結構。在 Python 中,可以通過 set() 函數或使用大括號 {} 來創建一個集合。

創建集合

# 創建一個空集合
empty_set = set()
print(empty_set)

# 創建帶有初始元素的集合
numbers = {1, 2, 3, 4, 5}
print(numbers)

輸出:

set()
{1, 2, 3, 4, 5}

注意,如果使用大括號創建一個空集合,會得到一個空字典而不是空集合。所以,創建空集合時應該使用 set() 函數。

集合的基本操作

添加元素

可以使用 add() 方法向集合中添加元素,如果添加的元素已經存在于集合中,則不會有任何影響。

fruits = {'apple', 'banana', 'orange'}
fruits.add('grape')
fruits.add('apple')  # 不會有任何影響,因為'apple'已經存在于集合中
print(fruits)

輸出:

{'banana', 'grape', 'apple', 'orange'}

刪除元素

可以使用 remove() 或 discard() 方法從集合中刪除指定元素,如果元素不存在,則 remove() 方法會拋出 KeyError 異常,而 discard() 方法不會有任何影響。

fruits = {'apple', 'banana', 'orange'}
fruits.remove('banana')
print(fruits)

fruits.discard('watermelon')  # 不會有任何影響,因為'watermelon'不存在于集合中
print(fruits)

輸出:

{'apple', 'orange'}
{'apple', 'orange'}

集合運算

可以對集合執行交集、并集、差集、對稱差等運算。

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

print(A & B)  # 交集
print(A | B)  # 并集
print(A - B)  # 差集
print(A ^ B)  # 對稱差

輸出:

{4, 5}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3}
{1, 2, 3, 6, 7, 8}

代碼演示

# 創建一個空集合
empty_set = set()
print(empty_set)

# 創建帶有初始元素的集合
numbers = {1, 2, 3, 4, 5}
print(numbers)

# 添加元素
fruits = {'apple', 'banana', 'orange'}
fruits.add('grape')
fruits.add('apple')  # 不會有任何影響,因為'apple'已經存在于集合中
print(fruits)

# 刪除元素
fruits.remove('banana')
print(fruits)

fruits.discard('watermelon')  # 不會有任何影響,因為'watermelon'不存在于集合中
print(fruits)

# 集合運算
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

print(A & B)  # 交集
print(A | B)  # 并集
print(A - B)  # 差集
print(A ^ B)  # 對稱差

輸出:

set()
{1, 2, 3, 4, 5}
{'orange', 'banana', 'grape', 'apple'}
{'orange', 'grape', 'apple'}
{'orange', 'grape', 'apple'}
{4, 5}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3}
{1, 2, 3, 6, 7, 8}

命名元組 (NamedTuple)

命名元組是一種具名元素的元組。與普通元組不同,命名元組的每個元素都有一個可讀性更高的名稱。在 Python 中,可以通過 collections 模塊中的 namedtuple() 函數來創建一個命名元組。

創建命名元組

創建命名元組時需要指定元素的名稱和順序,可以使用逗號分隔的字符串或者是元素名稱組成的列表來定義。

from collections import namedtuple

# 用逗號分隔的字符串定義元素
Person = namedtuple('Person', 'name age gender')
p1 = Person('Bob', 25, 'male')
print(p1)

# 使用元素名稱組成的列表定義元素
Point = namedtuple('Point', ['x', 'y'])
p2 = Point(3.14, 2.71)
print(p2)

輸出:

Person(name='Bob', age=25, gender='male')
Point(x=3.14, y=2.71)

訪問命名元組

可以使用點號運算符來訪問命名元組中的元素。

print(p1.name)
print(p2.y)

輸出:

Bob
2.71

修改命名元組

命名元組是不可變的,因此不能直接修改其元素。但可以使用 _replace() 方法創建一個新的命名元組,該方法會返回一個新的命名元組,其中指定的元素會被替換為新的值。注意,_replace() 方法并不會改變原來的命名元組,而是返回一個新的命名元組。

p3 = p2._replace(y=42)
print(p2)
print(p3)

輸出:

Point(x=3.14, y=2.71)
Point(x=3.14, y=42)

迭代器和生成器

迭代器和生成器是 Python 中非常重要的概念,它們可以幫助我們有效地處理大量數據,避免內存溢出的問題。

迭代器 (Iterator)

迭代器是一種可以逐個訪問集合元素的對象,而不必將集合完全加載到內存中。迭代器對象從第一個元素開始訪問,直到所有元素都被訪問完為止。在 Python 中,可以使用 iter() 和 next() 函數來創建和訪問迭代器。

numbers = [1, 2, 3, 4, 5]
it = iter(numbers)

print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))

輸出:

1
2
3
4
5

生成器 (Generator)

生成器是一種特殊的迭代器,可以使用函數來創建。與普通函數不同,生成器函數返回的是一個迭代器對象,可以使用 yield 關鍵字來逐個返回值,而不是一次性返回所有值。

def square_numbers(n):
    for i in range(n):
        yield i ** 2

# 創建生成器對象
my_generator = square_numbers(5)

# 訪問生成器中的元素
print(next(my_generator))
print(next(my_generator))
print(next(my_generator))
print(next(my_generator))
print(next(my_generator))

輸出:

0
1
4
9
16

生成器的一個重要特點是可以節省內存,因為它不需要將所有元素保存在內存中,而是逐個生成元素。此外,生成器還可以實現無限序列的生成,比如生成所有的斐波那契數列元素。以下是一個生成斐波那契數列的生成器函數示例:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

# 創建生成器對象
my_generator = fibonacci()

# 訪問生成器中的元素
print(next(my_generator))
print(next(my_generator))
print(next(my_generator))
print(next(my_generator))
print(next(my_generator))
print(next(my_generator))

輸出:

0
1
1
2
3
5

除了使用 next() 函數來訪問生成器中的元素之外,我們還可以使用 for 循環來遍歷生成器中的所有元素,因為生成器也是一種可迭代對象。

# 創建生成器對象
my_generator = square_numbers(5)

# 遍歷生成器中的元素
for num in my_generator:
    print(num)

輸出:

0
1
4
9
16

另外一個有用的函數是 send(),它可以在調用生成器函數時向生成器中傳遞一個值,并從當前位置繼續執行生成器函數。具體來說,send() 函數會將傳遞的值作為 yield 表達式的返回值,并將生成器函數的執行從 yield 表達式后的下一條語句開始執行。以下是一個示例:

def square_numbers():
    num = 0
    while True:
        # 從外部接收一個值
        x = yield num ** 2
        if x is not None:
            num = x
        else:
            num += 1

# 創建生成器對象
my_generator = square_numbers()

# 訪問生成器中的元素,并向生成器中傳遞一個值
print(next(my_generator))
print(next(my_generator))
print(my_generator.send(5))
print(next(my_generator))

輸出:

0
1
25
36

在上面的示例中,我們定義了一個生成器函數 square_numbers(),它會不斷地生成平方數。在函數中,我們使用 yield 表達式來逐個返回平方數,并將 num 的初始值設置為 0。當從外部通過 send() 函數向生成器中傳遞一個值時,我們可以在函數中將 num 的值修改為傳遞的值,并從 yield 表達式后的下一條語句開始執行。

以上就是迭代器和生成器的基本介紹,它們是 Python 中非常重要的概念,可以幫助我們高效地處理大量數據。

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-03-01 00:07:32

JavaScript迭代器生成器

2023-11-15 13:35:00

迭代器生成器Python

2017-06-26 16:26:15

Python迭代對象迭代器

2021-01-13 05:18:50

數據類型性能

2023-09-02 20:15:48

迭代器前端生成器

2024-05-10 11:31:59

Python迭代器生成器

2010-07-20 13:56:26

Python迭代器生成器

2024-11-11 06:10:00

Python生成器迭代器

2016-03-28 10:39:05

Python迭代迭代器

2024-11-01 15:51:06

2023-03-27 10:04:27

數據類型浮點型布爾型

2020-10-10 09:19:58

JavaScript開發技術

2020-10-26 13:46:07

Java基礎入門篇

2016-08-18 14:13:55

JavaScript基本數據引用數據

2017-09-06 09:26:03

Python生成器協程

2021-12-04 22:07:44

Python

2021-01-31 21:28:21

Python生成器列表

2011-05-26 13:54:04

Json

2023-12-22 15:32:20

2010-07-22 17:57:40

點贊
收藏

51CTO技術棧公眾號

中文字幕在线视频区| 天堂av一区二区| 亚洲日韩中文字幕在线播放| 欧美视频第二页| 欧美午夜精品免费| 欧美一区二区黄色| 亚洲情侣在线| 欧美日韩123| 国产精品网在线观看| 精品国产不卡| 激情婷婷综合| 精品一区二区三| 在线亚洲一区| 国产91丝袜在线播放0| 国产一区二区中文字幕| 国产精品亚洲а∨天堂免在线| 久久综合影视| 久久精品免视看| 中文字幕一区二区三区色视频| 亚洲柠檬福利资源导航| 在线看日韩精品电影| 欧美日韩激情视频| 欧美在线一二三四区| 亚洲精品大尺度| 精品国产一区久久久| 国产精品久久精品日日| 国产99一区视频免费| 日韩美女视频一区| 欧美一二三四在线| 日本精品久久久久影院| 精品国产一区二区三区免费| 黄色成人在线免费观看| 男人艹女人网站| 福利在线午夜| 老司机性视频| 色资源二区在线视频| 欧美精品入口| 欧美激情一区二区三区| 日韩理论片久久| 国产欧美一区二区白浆黑人| 成人黄色免费电影| 蜜桃视频动漫在线播放| 国产精品美女久久久| 激情成人在线视频| 国产成人亚洲综合| 国产视频久久久久久久| 久久久久久久av| 91香蕉电影院| 91精品在线观看视频| 精品中文字幕人| 性欧美大战久久久久久久免费观看| 亚洲一级免费观看| 午夜成在线www| 欧美巨大xxxx做受沙滩| www.久久久久爱免| 性欧美xxxx大乳国产app| 国产农村妇女精品| 日韩精品免费在线观看| 国产色综合一区二区三区| 黄页网站视频在线观看| 欧美一区二区三区婷婷| 蜜臀国产一区二区三区在线播放| 亚洲v中文字幕| 91亚洲精品视频| 成人18在线| 国产精品丝袜白浆摸在线| 亚洲第一av网| 国产欧美日韩中文字幕| 久久久亚洲综合网站| 999视频在线免费观看| 干日本少妇视频| 2020中文字幕在线播放| 成人全视频免费观看在线看| 欧美 日韩 国产一区二区在线视频 | 欧美一二三区在线| 久久影院理伦片| 日本在线观看www| 亚洲第一网站| 欧美一级xxx| 成人写真福利网| 裤袜国产欧美精品一区| 麻豆精品精品国产自在97香蕉| 亚洲国产成人精品久久久国产成人一区| 久久久久久亚洲综合影院红桃| 97国产精品免费视频| 99草草国产熟女视频在线| 国内高清免费在线视频| 久久精品国产99久久| 亚洲人成在线观看一区二区| 欧美另类精品xxxx孕妇| 日韩av在线综合| 欧美日韩中字| 91久久精品网| 欧美日本国产精品| 中文字幕乱码在线播放| a在线欧美一区| 亚洲香蕉成视频在线观看| 成人免费观看在线| 欧美一级色片| 日韩精品一区二区视频| 国产精品视频男人的天堂| 国产三区二区一区久久| 色播视频在线观看| 91tv官网精品成人亚洲| 日韩人在线观看| 91九色蝌蚪成人| 日本www在线| 韩国精品免费视频| 搡老女人一区二区三区视频tv| 九热视频在线观看| 欧美日韩调教| 欧美大片在线看| 成人免费一区二区三区牛牛| 亚洲一区二区在线免费看| 97视频久久久| 国产精品一区二区黑丝| 九九热精品在线| 亚洲网友自拍| 国产在线乱码一区二区三区| 欧美激情欧美狂野欧美精品| 免费xxxxx网站中文字幕| 亚洲黄色天堂| 国产成人精品免高潮费视频| 欧美xxxx做受欧美护士| 777欧美精品| 香蕉视频色版| 99精品国产一区二区三区不卡| 日韩av在线一区二区三区| 77成人影视| 欧美一区二区在线免费观看| 国产情侣第一页| 五月天综合网站| 欧美激情视频免费观看| 可以免费看污视频的网站在线| 国产在线播放一区二区三区| 91久久精品国产91久久性色| 国产区视频在线观看| 91精品亚洲一区在线观看| 欧美精品第一页| 亚洲成人基地| 亚洲韩国精品一区| 999精彩视频| 国产大陆a不卡| 亚洲tv在线观看| 国产精品日韩精品在线播放 | 少妇高清精品毛片在线视频| 国产成人av在线影院| 在线观看91久久久久久| 亚洲图区欧美| 亚洲午夜视频在线| 精品一区二区三区毛片| 日韩香蕉视频| 91色中文字幕| 亚州综合一区| 欧美激情在线狂野欧美精品| 桃子视频成人app| 中文字幕日韩有码| 超碰成人97| 91丨九色丨国产| 神马久久av| 色综合天天狠天天透天天伊人| 超碰97免费在线| 欧美精品一级二级三级| 日本三级韩国三级欧美三级| 99re6这里只有精品视频在线观看| 欧美12av| 久久久久久久久久久久久夜| 伊人色综合久久| 欧美视频二区36p| 理论视频在线观看| 夜夜精品视频一区二区| 成年人福利视频| 国内精品视频一区二区三区八戒| 777久久精品一区二区三区无码| 国产麻豆一精品一av一免费 | 男人的天堂www| 国产精品二三区| 欧美大片在线播放| 久久99久久久欧美国产| 欧美激情专区| 麻豆成人免费电影| 老司机激情视频| 成人av电影在线| 国产免费人做人爱午夜视频| 亚洲成在线观看| 男女在线观看视频| 在线一区二区日韩| 在线日韩三级| 欧亚精品中文字幕| 啄木系列成人av电影| 成人免费视频a| 久久看片网站| 99999精品视频| 午夜精品久久久久影视| h片在线观看| 狠狠色综合欧美激情| 美女在线观看视频一区二区| 大香煮伊手机一区| 在线中文字幕一区二区| 蜜桃视频动漫在线播放|