pythonzip是迭代器_Python迭代器和zip
迭代器就像一個項目流.您只能一次查看流中的項目,并且只能訪問第一個元素.要查看流中的某些內容,您需要將其從流中刪除,一旦您從流的頂部獲取內容,它就會從流中消失.
當您調用zip(i,i)時,zip首先查看第一個流并取出一個項目.然后它查看第二個流(恰好是與第一個流相同的流)并取出一個項目.然后它從這兩個項目中生成一個元組并反復重復這個元素,直到流中沒有任何內容.
也許更容易看出我是否在純python中編寫zip函數(為簡單起見,只有2個參數).它看起來像1:
def zip(a, b):
out = []
try:
while True:
item1 = next(a)
item2 = next(b)
out.append((item1, item2))
except StopIteration:
return out
現在假設你在談論a和b是同一個對象的情況.在這種情況下,我們只需在迭代器上調用next兩次(在你的示例中為i),它將依次從i中取出前兩個項并將它們打包成一個元組.
一旦我們理解為什么zip(i,i)的行為方式如此,zip(*([i] * 2))就不會太難了.讓我們從里到外讀出表達式……
[i] * 2
這只是創建一個新的列表(長度為2),其中兩個元素都是對迭代器i的引用.所以它與zip(* [i,i])是一樣的(當你想要重復超過2次的東西時,寫起來會更方便). *解壓縮是python中常見的習慣用法,你可以在the python tutorial中找到更多信息.它的要點是python接受iterable并“解包”它,好像每個iterable項都是函數的一個單獨的位置參數.所以:
zip(*[i, i])
做同樣的事情:
zip(i, i)
而現在鮑勃是我們的叔叔.由于zip(i,i)是本次討論開始的地方,我們剛剛全面展開.
1這個示例代碼絕對簡化,而不僅僅是前面提到的只接受2個參數.例如,zip可能會在輸入參數上調用iter,這樣它就可以用于任何可迭代的(不僅僅是迭代器),但這應該足以得到重點…
總結
以上是生活随笔為你收集整理的pythonzip是迭代器_Python迭代器和zip的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLServer 维护脚本分享(08)
- 下一篇: python+html语音人物交互_使用