我想知道如何在可能存储另一个列表的列表上找到值及其索引。
我看过this post,但是如果要搜索的列表中有一个列表,则无法使用。
这是我的意思。 输入以下信息:
["foo", ["f", "g"], "bar", "a", ["b", "c", "d"]]
是否可以找到例如"f"
并返回其索引?
我知道我可以使用递归之类的方法,但是有更快,更优雅的解决方案吗?
编辑:
此外,列表中可能有个以上列表。 例如,列表可以是:
["foo", ["f", ["b", "c", "d"], "g"], "bar", "a"]
我在Python 3中需要它。
答案 0 :(得分:1)
在处理任意嵌套的数据时,很难想象有一个比简单的递归生成器更优雅的解决方案。这将返回所有索引,无论是否嵌套。
这将创建一个生成器,该生成器查找与[[11472, 8405, 11428, 6613],
[11678, 9388, 10262, 6590],
[2945, 25843, 6980, 2150],
[1149, 24552, 7000, 5217],
[27373, 3166, 4494, 2885],
[19300, 4252, 7510, 6856],
[17744, 5390, 7472, 7312]]
匹配的任何元素并产生索引。如果v
是另一个列表,它将使用v
产生在子列表上调用同一生成器的结果,同时跟踪父列表。
yield from
答案 1 :(得分:0)
我想这就是你想要的!
let list = ["foo", ["f", "g"], "bar", "a", ["b", "c", "d"]];
for (let h = 0; h < list.length; h++) {
if (Array.isArray(list[h])) {
for (let i = 0; i < list[h].length; i++) {
console.log(list[h][i], h, i);
}
} else {
console.log(list[h], h);
}
}
上面的代码将打印以下内容:
foo 0
f 1 0
g 1 1
bar 2
a 3
b 4 0
c 4 1
d 4 2
答案 2 :(得分:0)
这是python解决方案:
arr = ["foo", ["f", "g"], "bar", "a", ["b", "c", "d"]]
for h in arr:
if isinstance(h,list):
for i in h:
print(i, arr.index(h), h.index(i))
else:
print(h, arr.index(h))