溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python中使用zip函數(shù)出現(xiàn)<zip object at 0x02A9E418>錯(cuò)誤的原因

發(fā)布時(shí)間:2020-09-04 11:55:10 來源:腳本之家 閱讀:271 作者:sinat_15355869 欄目:開發(fā)技術(shù)

python中zip函數(shù)返回一個(gè)以元組為元素的列表,其中第 i 個(gè)元組包含每個(gè)參數(shù)序列的第 i 個(gè)元素。返回的列表長度被截?cái)酁樽疃痰膮?shù)序列的長度。只有一個(gè)序列參數(shù)時(shí),它返回一個(gè)1元組的列表。沒有參數(shù)時(shí),它返回一個(gè)空的列表。概括起來一句話: zip函數(shù)返回的是一個(gè)列表,但是列表里面的元素是由一個(gè)個(gè)元組構(gòu)成的..

在Python中使用zip函數(shù),出現(xiàn)<zip object at 0x02A9E418>錯(cuò)誤的原因是,你是用的是python2點(diǎn)多的版本,python3.0對python做了改動(dòng)

  1. zip方法在Python 2 和Python 3中的不同
  2.  為何有這種不同
  3.  更多注解

問題一:zip方法在Python 2 和Python 3中的不同

Python 2 的代碼演示:

$ python2
>>> a = zip((1, 2), (3, 4))
>>> a
[(1, 2), (3, 4)]

# 可以看到這里返回的是一個(gè)list

Python 3 的代碼演示:

$ python3
>>> a = zip((1, 2), (3, 4))
>>> a
<zip object at 0x1007096c8>

# 可以看到這里返回的是一個(gè)對象,這里就是2和3的不同點(diǎn) >>> dir(a) # 查看a的相關(guān)屬性 [‘__class__', ‘__delattr__', ‘__dir__', ‘__doc__', ‘__eq__', ‘__format__', ‘__ge__', ‘__getattribute__' , ‘__gt__', ‘__hash__', ‘__init__', ‘__iter__', ‘__le__', ‘__lt__', ‘__ne__', ‘__new__', '__next__',  ‘__reduce__', ‘__reduce_ex__', ‘__repr__', ‘__setattr__', ‘__sizeof__', ‘__str__', ‘__subclasshook__' ] # 這里值得注意的是 ‘__iter__' 和 ‘__next__' 方法,說明a是一個(gè)支持遍歷的對象 # 既然知道了a是一個(gè)支持遍歷的對象,我們也就基本明白了a的用法了 ### 和Python2的區(qū)別(一):返回的是一個(gè)支持遍歷的對象,而不是一個(gè)list本身 >>> for i in a: print i # in 方法 … (1, 3) (2, 4) >>> next(a) # 我們測試__next__方法 Traceback (most recent call last): File “<stdin>”, line 1, in <module> StopIteration # 說明next方法是支持的,但是這里也說明了對象只能遍歷一次 >>> a = zip((1, 2), (3, 4)) # 這里需要重新賦值,因?yàn)檫@個(gè)對象只能遍歷一次 >>> next(a) (1, 3) # 運(yùn)行良好 ### 返回的對象支持遍歷的操作

問題二:為何有這種不同

我想最重要的原因是節(jié)約了不少的內(nèi)存吧。Python的運(yùn)行效率和編譯類型的語言自然是沒法比,但是能優(yōu)化就優(yōu)化一點(diǎn)吧~誰不想有更高的追求呢。

問題三:更多注解

這個(gè)zip在不同版本的不同反應(yīng)了python的一個(gè)演變:大部分返回list的函數(shù)不在返回list,而是返回一個(gè)支持遍歷的對象,比如map、fiter之類的,基本的例子如下:

$ python3
>>> a = map(abs, [1, 2, -3])
>>> a
<map object at 0x100707ed0>
>>> list(a) # 如果不習(xí)慣,可以自己手動(dòng)轉(zhuǎn)化為list,也是寫兼容代碼需要注意的地方
[1, 2, 3]

$ python2
>>> a = map(abs, [1, 2, -3])
>>> a
[1, 2, 3]

所以運(yùn)行方法是

>>> t=[‘name','age','gender']
>>> t2=[‘milo',30,'male']
>>> for each in zip(t,t2):
 print(each)

運(yùn)行結(jié)果:

(‘name', ‘milo')
(‘a(chǎn)ge', 30)
(‘gender', ‘male')
for each in zip(t,t2):
 print(each)

總結(jié)

以上所述是小編給大家介紹的python中使用zip函數(shù)出現(xiàn)<zip object at 0x02A9E418>錯(cuò)誤的原因,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI