Python 小而美的函数

本文介绍了Python中几个实用的内置函数,包括any用于检查序列中有无元素为True,all用于判断所有元素是否为True,sum用于求和,max和min用于找到序列的最大值和最小值,zip用于合并序列,以及itertools.izip生成迭代器,还有enumerate用于获取序列元素及其索引。每个函数的特点和使用注意事项均有所阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况

any

any(iterable)

Return True if any element of the iterable is true. If the iterable is empty, return False

如果序列中任何一个元素为True,那么any返回True。该函数可以让我们少些一个for循环。有两点需要注意

(1)如果迭代器为空,返回的是False

(2)具有短路求值性质,即如果迭代器中某个元素返回True,那么就不会对后面的元素求值。

者曾经犯过这么一个错误

    ret = any(self.calc_and_ret(e) for e in elements)

    def self.calc_and_ret(self, e):

        # do a lot of calc here which effect self

        return True(or False)

    本意是希望对所有的element都计算,然后返回一个结果。但事实上由于短路求值, 可能后面很多的元素都不会再调用calc_and_ret

all

all(iterable)

Return True if all elements of the iterable are true (or if the iterable is empty

当所有元素都为True时,all函数返回True。两点注意

(1)如果迭代器为空,返回的是True

(2)具有短路求值性质,即如果迭代器中某个元素返回False,那么就不会对后面的元素求值。

sum

sum(iterable[, start])

Sums start and the items of an iterable from left to right and returns the total. start defaults to 0.

sum用来对迭代器的数值求和,且可以赋予一个初始值(默认为0)。注意

(1)如果是空的迭代器,返回0

max min

分别返回可迭代序列的最大值 最小值。注意事项

(1)如果是空的迭代器,会抛异常(ValueError)

zip

接受n个序列作为参数,返回tuple的一个列表,第i个tuple由每个序列的第i个元素组成。for example

>>> zip((1,2,3), ('a', 'b', 'c'))

[(1, 'a'), (2, 'b'), (3, 'c')]

>>> zip((1,2,3), ('a', 'b', 'c'), (True, False, True))

[(1, 'a', True), (2, 'b', False), (3, 'c', True)]

注意:

(1)作为参数的序列长度可以不一致,以长度最短的序列为准。for example

>>> zip((1,2,3), ('a', 'b'))

[(1, 'a'), (2, 'b')]

(2)即使参数只有一个序列,返回值也是a list of tuple

>>> zip((1,2,3))

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

itertools.izip

功能能zip,不过返回值是iterator,而不是list

enumerate

这个函数大家应该都有使用过,用来返回序列中元素的下标和元素。同时容易被忽略的是:enumerate 还接受一个参数作为下标的开始

enumerate(sequence[, start=0])

我们知道在Python以及大多数编程语言中,数组(序列)的下标都是以0开始(lua除外)。但在现实中,比如排行,我们都是说第一名,而不是第0名。所以start=1可能是个好主意。

>>> for idx, e in enumerate(('a', 'b', 'c'), 1):

...     print idx, e

...

1 a

2 b

3 c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lmr廖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值