gpt4 book ai didi

Python:嵌套列表中元素的索引列表

转载 作者:太空狗 更新时间:2023-10-29 18:27:04 39 4
gpt4 key购买 nike

我知道我在寻找什么。我想让 python 告诉我它在哪个列表中。

这是一些伪代码:

item = "a"

nested_list = [["a", "b"], ["c", "d"]]

list.index(item) #obviously this doesn't work

这里我希望 python 返回 0(因为“a”是更大列表中第一个子列表中的一个元素)。我不关心它是哪个子元素。我不在乎是否有重复项,例如 ["a", "b", "a"] 应该返回与上述示例相同的内容。

最佳答案

在 Python 2.6 或更高版本中,

next((i for i, sublist in enumerate(nested_list) if "a" in sublist), -1)

假设如果 'a' 不在任何子列表中,您需要一个 -1 结果。

当然它也可以在旧版本的 Python 中完成,但不是那么方便,并且由于您没有指定您感兴趣的 Python 版本,我认为最好使用最新的生产实体一个(如果您需要指定其他旧版本的 Python,只需编辑您的答案)。

编辑:根据要求,让我试着解释一下这是如何工作的。我正在使用(2.6 中的新功能)内置函数 next ,具体来说,我正在调用 next(iterator, default):返回迭代器的下一项(因此也是第一项,因为这是我们第一次推进该迭代器),或者返回默认值迭代器完成时的值(这意味着“空”,如果它在我们推进它之前就完成了;-)。默认值显然是 -1 并且如果“a 不存在于所有子列表中”则返回,这意味着在这种情况下与“迭代器为空”相同.

让我们再看看迭代器:

(i for i, sublist in enumerate(nested_list) if "a" in sublist)

(四舍五入的)圆括号和 forif 关键字表示这是一个生成器表达式,也被称为 genexp。 i(索引)和 sublist(该索引处的项目)比 enumerate(nested_list) 前进——如果我们没有 enumerate 在这里,那么我们就不会跟踪索引,但在这种情况下我们确实需要它。只有当满足 if 子句时才会考虑它们,也就是说,当您要查找的元素出现在当前子列表中时。

所以这个 genexp 一次产生一个索引的每个值,使得该索引处的子列表满足条件 "a"in sublist。因为我们在 next 中使用它,所以我们只取第一个这样的索引。

OP 可能有理由认为一个神奇的内置函数可以用三四个字符完成所有这些操作会更方便——因此,对于这个非常具体的要求,我相信我以前从未遇到过使用 Python 十年;然而,如果每个这样的特定要求都有自己非常专业的内置语言,那么内置语言就会变得比税法还大。相反,Python 提供了许多较低级别的“乐高积木”和一些将它们拼在一起的简便方法,以清楚(并且相当简洁地)表达针对大量组合特定需求的解决方案,例如 OP。

关于Python:嵌套列表中元素的索引列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405928/

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