gpt4 book ai didi

python - 如果列表包含 bool 值,如何从列表中获取整数的索引?

转载 作者:太空狗 更新时间:2023-10-29 17:13:37 25 4
gpt4 key购买 nike

我刚开始使用 Python。

如果列表在 1 之前包含 bool True 对象,如何从列表中获取整数 1 的索引?

>>> lst = [True, False, 1, 3]
>>> lst.index(1)
0
>>> lst.index(True)
0
>>> lst.index(0)
1

我认为 Python 在 的参数中将 0 视为 False 并将 1 视为 True索引 方法。如何获取整数 1(即 2)的索引?

另外,在列表中以这种方式处理 bool 对象背后的推理或逻辑是什么?从解决方案来看,我可以看出它不是那么简单。

最佳答案

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(== 运算符)执行比较。在您的情况下,比较返回真实值,因为 TrueFalse 分别具有整数 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 的实例 beforex 与 1 进行比较。

请记住,next 可以引发 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

关于python - 如果列表包含 bool 值,如何从列表中获取整数的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30843103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com