python中布尔类型的值包括_python – 如果列表包含布尔值,如何从列表中获取整数的索引?...

documentation说

Lists are mutable sequences, typically used to store collections of

homogeneous items (where the precise degree of similarity will vary by

application).

您不应该在列表中存储异构数据.

list.index的实现只使用Py_EQ(== operator)进行比较.在你的情况下,比较返回真值,因为True和False分别具有整数1和0(the bool class is a subclass of int)的值.

但是,您可以使用生成器表达式和built-in next function(从生成器获取第一个值),如下所示:

In [4]: next(i for i, x in enumerate(lst) if not isinstance(x, bool) and x == 1)

Out[4]: 2

在这里,我们检查x是否是一个bool的实例,然后将x比1.

请记住,接下来可以提高StopIteration,在这种情况下,可能希望(重新)引发ValueError(以模拟list.index的行为).

将这全部包含在一个函数中:

def index_same_type(it, val):

gen = (i for i, x in enumerate(it) if type(x) is type(val) and x == val)

try:

return next(gen)

except StopIteration:

raise ValueError('{!r} is not in iterable'.format(val)) from None

一些例子:

In [34]: index_same_type(lst, 1)

Out[34]: 2

In [35]: index_same_type(lst, True)

Out[35]: 0

In [37]: index_same_type(lst, 42)

ValueError: 42 is not in iterable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值