pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

從匹配條件的迭代中獲取第一個(gè)項(xiàng)目

Get the first item from an iterable that matches a condition(從匹配條件的迭代中獲取第一個(gè)項(xiàng)目)
本文介紹了從匹配條件的迭代中獲取第一個(gè)項(xiàng)目的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我想從符合條件的列表中獲取第一項(xiàng).重要的是,生成的方法不處理整個(gè)列表,這可能非常大.例如,下面的函數(shù)就足夠了:

I would like to get the first item from a list matching a condition. It's important that the resulting method not process the entire list, which could be quite large. For example, the following function is adequate:

def first(the_iterable, condition = lambda x: True):
    for i in the_iterable:
        if condition(i):
            return i

這個(gè)函數(shù)可以這樣使用:

This function could be used something like this:

>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4

但是,我想不出一個(gè)好的內(nèi)置/單線讓我這樣做.如果不需要的話,我并不特別想復(fù)制這個(gè)功能.是否有內(nèi)置方法可以獲取第一個(gè)匹配條件的項(xiàng)目?

However, I can't think of a good built-in / one-liner to let me do this. I don't particularly want to copy this function around if I don't have to. Is there a built-in way to get the first item matching a condition?

推薦答案

在 Python 2.6+ 和 Python 3 中:

In Python 2.6+ and Python 3:

如果您希望在未找到匹配元素的情況下引發(fā) StopIteration:

If you want StopIteration to be raised if no matching element is found:

next(x for x in the_iterable if x > 3)

如果您希望返回 default_value(例如 None):

If you want default_value (e.g. None) to be returned instead:

next((x for x in the_iterable if x > 3), default_value)

請(qǐng)注意,在這種情況下,您需要在生成器表達(dá)式周圍添加一對(duì)額外的括號(hào) - 只要生成器表達(dá)式不是唯一的參數(shù),就需要它們.

Note that you need an extra pair of parentheses around the generator expression in this case ? they are needed whenever the generator expression isn't the only argument.

我看到大多數(shù)答案堅(jiān)決忽略next 內(nèi)置的,所以我假設(shè)出于某種神秘的原因,他們 100% 專注于 2.5 及更早版本 - 沒有提及 Python 版本問題(但我沒有在答案中看到 確實(shí)提到了內(nèi)置的next,這就是為什么我認(rèn)為有必要自己提供一個(gè)答案——至少正確的版本"問題會(huì)以這種方式記錄下來;-).

I see most answers resolutely ignore the next built-in and so I assume that for some mysterious reason they're 100% focused on versions 2.5 and older -- without mentioning the Python-version issue (but then I don't see that mention in the answers that do mention the next built-in, which is why I thought it necessary to provide an answer myself -- at least the "correct version" issue gets on record this way;-).

在 2.5 中,.next() 如果迭代器立即完成,則迭代器的方法會(huì)立即引發(fā) StopIteration —— 即,對(duì)于您的用例,如果迭代器中沒有項(xiàng)目滿足條件.如果您不關(guān)心(即,您知道 必須 至少有一個(gè)令人滿意的項(xiàng)目),那么只需使用 .next() (最好在 genexp 上,行next 在 Python 2.6 及更高版本中內(nèi)置).

In 2.5, the .next() method of iterators immediately raises StopIteration if the iterator immediately finishes -- i.e., for your use case, if no item in the iterable satisfies the condition. If you don't care (i.e., you know there must be at least one satisfactory item) then just use .next() (best on a genexp, line for the next built-in in Python 2.6 and better).

如果您確實(shí)在乎,最好按照您在 Q 中首先指出的那樣將東西包裝在一個(gè)函數(shù)中,雖然您提出的函數(shù)實(shí)現(xiàn)很好,但您也可以使用 itertools,一個(gè) for...: break 循環(huán),或一個(gè) genexp,或一個(gè) try/except StopIteration 作為函數(shù)的主體,正如各種答案所建議的那樣.這些替代方案中的任何一個(gè)都沒有太多附加值,所以我會(huì)選擇您最初提出的極其簡(jiǎn)單的版本.

If you do care, wrapping things in a function as you had first indicated in your Q seems best, and while the function implementation you proposed is just fine, you could alternatively use itertools, a for...: break loop, or a genexp, or a try/except StopIteration as the function's body, as various answers suggested. There's not much added value in any of these alternatives so I'd go for the starkly-simple version you first proposed.

這篇關(guān)于從匹配條件的迭代中獲取第一個(gè)項(xiàng)目的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How to draw a rectangle around a region of interest in python(如何在python中的感興趣區(qū)域周圍繪制一個(gè)矩形)
How can I detect and track people using OpenCV?(如何使用 OpenCV 檢測(cè)和跟蹤人員?)
How to apply threshold within multiple rectangular bounding boxes in an image?(如何在圖像的多個(gè)矩形邊界框中應(yīng)用閾值?)
How can I download a specific part of Coco Dataset?(如何下載 Coco Dataset 的特定部分?)
Detect image orientation angle based on text direction(根據(jù)文本方向檢測(cè)圖像方向角度)
Detect centre and angle of rectangles in an image using Opencv(使用 Opencv 檢測(cè)圖像中矩形的中心和角度)
主站蜘蛛池模板: 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 济南宣传册设计-画册设计_济南莫都品牌设计公司| 济南电缆桥架|山东桥架-济南航丰实业有限公司 | 重庆中专|职高|技校招生-重庆中专招生网 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 棉服定制/厂家/公司_棉袄订做/价格/费用-北京圣达信棉服 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 桨叶搅拌机_螺旋挤压/方盒旋切造粒机厂家-无锡市鸿诚输送机械有限公司 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 消防设施操作员考试报名时间,报名入口,报考条件 | 春腾云财 - 为企业提供专业财税咨询、代理记账服务 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 东风体检车厂家_公共卫生体检车_医院体检车_移动体检车-锦沅科贸 | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 紫外可见光分光度计-紫外分光度计-分光光度仪-屹谱仪器制造(上海)有限公司 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 粉末包装机-给袋式包装机-全自动包装机-颗粒-液体-食品-酱腌菜包装机生产线【润立机械】 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 大白菜官网,大白菜winpe,大白菜U盘装系统, u盘启动盘制作工具 | 荣事达手推洗地机_洗地机厂家_驾驶式扫地机_工业清洁设备 | 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 钢格板_钢格栅_格栅板_钢格栅板 - 安平县鑫拓钢格栅板厂家 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 |