標籤:bar 位置 name tuples ict 單點 容器 情況 就是
容器(container)
容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代擷取,可以用in, not in關鍵字判斷元素是否包含在容器中。通常這類資料結構把所有的元素儲存在記憶體中(特殊情況除外,比如迭代器和產生器對象)在Python中,常見的容器物件有:
- list, deque, ....
- set, frozensets, ....
- dict, defaultdict, OrderedDict, Counter, ....
- tuple, namedtuple, …
- str
容器比較容易理解,因為你就可以把它看作是一個盒子、一棟房子、一個柜子,裡面可以塞任何東西。從技術角度來說,當它可以用來詢問某個元素是否包含在其中時,那麼這個對象就可以認為是一個容器,比如 list,set,tuples都是容器物件:
1 1 in [1, 2, 3] # lists2 4 not in [1, 2, 3]3 1 in {1, 2, 3} # sets4 4 not in {1, 2, 3}5 1 in (1, 2, 3) # tuples6 4 not in (1, 2, 3)
判斷元素的key是否存在
1 d = {1: ‘foo‘, 2: ‘bar‘, 3: ‘qux‘}2 print(‘foo‘ in d) #False3 print(1 in d) #True
判斷一個字串是否在另一個字串中
1 s = ‘foobar‘2 print(‘ob‘ in s) #True
儘管絕大多數容器都提供了某種方式來擷取其中的每一個元素,但這並不是容器本身提供的能力,而是可迭代對象賦予了容器這種能力
可迭代對象(iterable)
很多容器都是可迭代對象,此外還有很多的對象同樣也是可迭代對象,比如處於開啟狀態的files
可以返回一個迭代器對象的都可稱之為可迭代對象
1 x = [1, 2, 3]2 y = iter(x)3 z = iter(x)4 next(y) #15 next(y) #26 next(z) #17 type(x) #<class ‘list‘>8 type(y) #<class ‘list_iterator‘>
這裡x是可迭代對象,y、z是兩個獨立的迭代器
迭代器
迭代器是一個帶狀態的對象,從第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
產生器
在 Python 中,使用了 yield 的函數被稱為產生器(generator)。
只有在調用時才會產生相應資料
只記錄當前位置
只有一個next()方法
產生器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解產生器就是一個迭代器。
本文轉自:https://foofish.net/iterators-vs-generators.html
產生器與迭代器