gpt4 book ai didi

python - 在python中查找嵌套项的索引

转载 作者:行者123 更新时间:2023-11-28 20:45:05 25 4
gpt4 key购买 nike

我一直在处理一些相对复杂的数组,例如:

array = [ "1", 2, ["4", "5", ("a", "b")], ("c", "d")]

我一直在寻找一种方法来查找项目并检索到“索引”(是否可以引用项目的位置,例如“a” - 它在元组内部作为与数组同一级别的索引?)

现在我的第一个想法是使用类似简单辅助函数的东西,例如:

def myindex(nestedlist, item):
for i in nestedlist:
if item in i:
index = []
index.append(i)
index.append(i.index(item))
return index

但我敢肯定你能猜到这样的函数不会有多大用处,尤其是因为我事先不知道数组可能有多少层,以及每个层可能包含什么(就数据而言)类型/结构)

任何正确方向的提示都将不胜感激!

最佳答案

你想要的是这样的:

def myindex(lst, target):
for index, item in enumerate(lst):
if item == target:
return [index]
if isinstance(item, (list, tuple)):
path = myindex(item, target)
if path:
return [index] + path
return []

作为递归,这将处理任意深度的嵌套(直到递归限制)。

对于您的示例 array,我得到:

>>> myindex(array, "a")
[2, 2, 0]

正如 Adam 在评论中提到的,显式检查实例类型不是很 Pythonic。 duck-typed , "easier to ask for forgiveness than permission"替代方案是:

def myindex(lst, target):
for index, item in enumerate(lst):
if item == target:
return [index]
if isinstance(item, str): # or 'basestring' in 2.x
return []
try:
path = myindex(item, target)
except TypeError:
pass
else:
if path:
return [index] + path
return []

字符串的特定处理是必要的,因为即使是空字符串也可能被迭代,从而导致无休止的递归。

关于python - 在python中查找嵌套项的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24419487/

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