形式:zip(*iterables)
引數解釋:iterables---迭代器:可以是內建的迭代器,比如:字串、列表、元組、字典、集合等,也可以是使用者定義的迭代器,其中需要包含__iter__()方法
返回值:返回乙個由元組組成的物件,以下說的都是經過list()之後的列表形式。
1)如果沒有引數,將返回乙個空的迭代器;
2)如果只有乙個引數,將返回乙個1-tuple的迭代器,意思是其中每個元組只有乙個元素;
3)如果有多個引數,則返回的迭代器中的每個元組的元素個數由最短長度的輸入引數決定。
注意:1)zip 方法在 python 2 和 python 3 中的不同:在 python 3.x 中為了減少記憶體,zip() 返回的是乙個物件。如需展示列表,需手動 list() 轉換;
2)zip(*)實現解壓功能,即將壓縮值轉換回原來的形式。解壓的時候,傳入的引數可以為轉換後的列表,亦可以是未轉換的物件,結果一樣(看6、7),剛開始我以為雖然沒有進list()轉換,但它們指的是一樣的;但是雙重zip後,結果卻不一樣(看8、9),如果指的一樣,那9就不應該為空列表了吧;所以現在有點搞不明白了,之後再看看原始碼,搞清楚了補進來!
下面從**的角度更好的理解:
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
no_zip = list(zip()) #1)沒有引數:
one_zip = list(zip(a)) #2)乙個引數:[(1,),(2,),(3,)]
two_zip = list(zip(a,b)) #3)兩個引數:[(1, 4), (2, 5), (3, 6)]
two_zip_unequal=list(zip(a,c)) #4)兩個長度不等的引數:[(1, 4), (2, 5), (3, 6)]
two_zip_no_list = zip(a,b) #5)不用list的話,返回乙個物件:zip_unzip = list(zip(*two_zip)) #6)解壓-引數為列表:[(1, 2, 3), (4, 5, 6)]
zip_unzip_no_list= list(zip(*two_zip_no_list)) #7)解壓-引數為物件:[(1, 2, 3), (4, 5, 6)]
double_zip=list(zip(two_zip)) #8)雙重zip-引數為列表:[((1, 4),), ((2, 5),), ((3, 6),)]
double_zip_no_list=list(zip(two_zip_no_list)) #9)雙重zip-引數為物件:
y1 = list(zip(*[a])) #[(1,), (2,), (3,)]
y2 = list(zip([a])) #[([1, 2, 3],)]
y3 = list(zip(*[a]* 2)) #[(1, 1), (2, 2), (3, 3)]
y4 = list(zip([a] * 2)) #[([1, 2, 3],), ([1, 2, 3],)]
Python 內建函式zip
zip 將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的物件 作用 節約了記憶體 特點 要轉換為list才能輸出 元素的個數取決於最短的物件 解壓 利用 進行解壓 打包 zip iterable,解壓 zip obj obj為打包格式的物件,zip iterable,in 1 a 1 2...
Python中的內建函式 zip用法
python中的內建函式 zip用法 語法 zip iter1 iter2 zip 函式將可迭代物件作為引數,將每個物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的物件。我們可以使用 list 轉換來輸出列表。注意 python2中 zip 返回的是乙個列表 如果各個可迭代物件的元素個數不...
Python 內建函式之zip
zip函式用於將可迭代物件作為引數,將可迭代物件中的元素打包成乙個個元祖,然後返回這些元祖組成的乙個zip物件,可以使用list 方法將這個zip物件轉化為列表,列表中的元素的資料型別依舊是元組型別。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同。l1 1,2,3 l2 a b c ...