电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

深入了解Python enumerate和zip

瀏覽:115日期:2022-07-17 10:24:04

enumerate

首先介紹的是enumerate函數。

在我們日常編程的過程當中,經常會遇到一個問題。

在C語言以及一些古老的語言當中是沒有迭代器這個概念的,所以我們要遍歷數組或者是容器的時候,往往只能通過下標。有了迭代器之后,我們遍歷的過程方便了很多,我們可以直接用一個變量去迭代一個容器當中的值。最簡單的例子就是數組的遍歷,比如我們要遍歷items這個數組。我們可以直接:

for item in items:

通過迭代器的方式我們可以很輕松地遍歷數組,而不再需要下標,也不需要計算數組的長度了。但是如果我們在循環體當中需要知道元素的下標該怎么辦?

難道我們真的只能在下標和迭代器當中選擇一個嗎,比如在循環體的外面添加一個變量來記錄下標?

idx = 0for item in items: operation() idx += 1

這樣可以解決問題,但是很麻煩,一點也不簡潔,用專業的話來說一點也不pythonic(符合Python標準的代碼)。為了追求pythonic,于是有了enumerate函數,來解決了我們又想直接迭代又需要知道元素下標的情形。

它的用法也很簡單,我們把需要迭代的對象或者迭代器傳入enumerate函數當中,它會為我們創建一個新的迭代器,同時返回下標以及迭代的內容。我們來看一個例子:

for i, item in enumerate(items):

除此之外,enumerate還支持傳入參數。比如在某些場景當中,我們希望下標從1開始,而不再是0開始,我們可以額外多傳入一個參數實現這點:

for i, item in enumerate(items, 1):

循環是我們編程的時候必不可少的操作,也正因此,enumerate函數使用非常廣泛。但是有一點需要注意,如果我們迭代的是一個多元組數組,我們需要注意要將index和value區分開。舉個例子:

data = [(1, 3), (2, 1), (3, 3)]

在不用enumerate的時候,我們有兩種迭代方式,這兩種都可以運行。

for x, y in data:for (x, y) in data:

但是如果我們使用enumerate的話,由于引入了一個index,我們必須要做區分,否則會報錯,所以我們只有一種迭代方式:

for i, (x, y) in enumerate(data):

zip

接下來要介紹的另一個函數同樣是方便我們迭代的,不過它針對的是另一個場景——多對象迭代。

它的應用場景非常簡單,就是我們想要同時迭代多份數據,比如用戶的名字和用戶的職業數據是分開的,我們希望同時遍歷一個用戶的職業和名字。如果不使用zip,我們可能只能放棄迭代器回到傳統的下標遍歷的模式了。這樣當然是可以的,不過有兩個小問題,第一個小問題當然是代碼的可讀性變差了,不夠pythonic,第二個問題是我們需要維護兩個容器長度不一樣的情況,會增加額外的代碼。而使用zip,可以同時解決以上兩個問題。

我們來看一個例子:

names = [’xiaoming’, ’xiaohua’, ’xiaohei’, ’xiaoli’]jobs = [’coach’, ’student’, ’student’, ’student’, ’professor’]for name, job in zip(names, jobs): print(name, job)

最后輸出的結果是人名和職業的tuple:

xiaoming coachxiaohua studentxiaohei studentxiaoli student

上面舉的例子當中,names和jobs的長度其實是不一致的,在使用了zip的情況下,會自動替我們按照其中較短的那個進行截斷。如果我們不希望截斷,我們也可以使用itertools下的zip_longest來代替zip:

from itertools import zip_longestfor name, job in zip_longest(names, jobs):

這樣的話長度不夠的元素會以None來填充,zip_longest提供了一個參數fillvalue,可以填充成我們指定的值。

無論是zip還是zip_longest,都可以支持多迭代器的遍歷。比如:

names = [’xiaoming’, ’xiaohua’, ’xiaohei’, ’xiaoli’]jobs = [’coach’, ’student’, ’student’, ’student’, ’professor’]hobbies = [’footbal’, ’tennis’, ’badminton’, ’basketbal’]for name, job, hobby in zip(names, jobs, hobbies): print(name, job, hobby)

zip除了方便我們迭代遍歷之外,另一個很大的用處是可以很方便地生成dict。比如剛才的例子當中,我們想生成一個名稱和職業的dict,一般的辦法當然是先定義一個dict,然后遍歷所有的key和value,來生成dict。然而使用zip,我們可以將這個操作簡化到一行代碼:

jobDict = dict(zip(names, jobs))

需要注意的是,我們調用zip返回的結果其實是一個迭代器,我們在轉化成dict的時候自動遍歷了迭代器當中的內容。比如我們如果直接打印出zip調用結果的話,就會發現屏幕上輸出的是一個迭代器的地址:

print(zip(names, jobs))>>> <zip object at 0x10ec93b40>

我們想要獲得它的內容,需要將它手動轉成list:

print(list(zip(names, jobs)))>>> [(’xiaoming’, ’coach’), (’xiaohua’, ’student’), (’xiaohei’, ’student’), (’xiaoli’, ’student’)]

無論是enumerate還是zip其實底層都是基于迭代器實現的,從原理上來說并沒有什么太深奧的內容,而且我們不使用它們也不影響我們寫代碼。但是Python之所以是Python,之所以很多人稱道它簡潔的語言和邏輯,離不開我們廣泛地使用這些簡化代碼邏輯的工具和方法。因此我們加以了解是非常有必要的,希望大家都能寫出pythonic的代碼,不僅寫代碼能力強,而且代碼本身也漂亮。

以上就是深入了解Python enumerate和zip的詳細內容,更多關于Python enumerate和zip的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 云南成人高考_云南成考网| 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | IIS7站长之家-站长工具-爱网站请使用IIS7站长综合查询工具,中国站长【WWW.IIS7.COM】 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | 贴片电感_贴片功率电感_贴片绕线电感_深圳市百斯特电子有限公司 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | 高中学习网-高考生信息学习必备平台 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 焊缝跟踪系统_激光位移传感器_激光焊缝跟踪传感器-创想智控 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 挤出机_橡胶挤出机_塑料挤出机_胶片冷却机-河北伟源橡塑设备有限公司 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | 打包钢带,铁皮打包带,烤蓝打包带-高密市金和金属制品厂 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | MTK核心板|MTK开发板|MTK模块|4G核心板|4G模块|5G核心板|5G模块|安卓核心板|安卓模块|高通核心板-深圳市新移科技有限公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 二手回收公司_销毁处理公司_设备回收公司-找回收信息网 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 闪蒸干燥机-喷雾干燥机-带式干燥机-桨叶干燥机-[常州佳一干燥设备] | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 硅胶制品-硅橡胶制品-东莞硅胶制品厂家-广东帝博科技有限公司 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 造价工程师网,考试时间查询,报名入口信息-网站首页 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | CPSE安博会| 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 |