python的zip()方法

zip(*iterables)

  • 創建一個聚合了來自每個可迭代對象中的元素的迭代器。
  • 返回一個元組的迭代器,其中的第 i 個元組包含來自每個參數序列或可迭代對象的第 i 個元素。 當所輸入可迭代對象中最短的一個被耗盡時,迭代器將停止迭代。 當只有一個可迭代對象參數時,它將返回一個單元組的迭代器。 不帶參數時,它將返回一個空迭代器。 相當於:
    def zip(*iterables):
        # zip('ABCD', 'xy') --> Ax By
        sentinel = object()
        iterators = [iter(it) for it in iterables]
        while iterators:
            result = []
            for it in iterators:
                elem = next(it, sentinel)
                if elem is sentinel:
                    return
                result.append(elem)
            yield tuple(result)
    
  • 函數會保證可迭代對象按從左至右的順序被求值。 使得可以通過 zip(*[iter(s)]*n) 這樣的慣用形式將一系列數據聚類爲長度爲 n 的分組。 這將重複同樣的迭代器 n 次,以便每個輸出的元組具有第 n 次調用該迭代器的結果。 它的作用效果就是將輸入拆分爲長度爲 n 的數據塊。
  • 當你不用關心較長可迭代對象末尾不匹配的值時,則 zip() 只須使用長度不相等的輸入即可。 如果那些值很重要,則應改用 itertools.zip_longest()
  • zip() 與 * 運算符相結合可以用來拆解一個列表
    >>> x = [1, 2, 3]
    >>> y = [4, 5, 6]
    >>> zipped = zip(x, y)
    >>> list(zipped)
    [(1, 4), (2, 5), (3, 6)]
    >>> x2, y2 = zip(*zip(x, y))
    >>> x == list(x2) and y == list(y2)
    True
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章